Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 413

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, эксперты!

При создании unit-тестов, возникла ошибка
насколько я понимаю, неверное обращение к памяти (см. в прикрепленном файле)

Ошибка вылетает только после того, как я нажимаю ЗАКРЫТЬ форму unit-тестирования(DUnit).

На Break никак не реагирует, т.е. никуда не выкидывает, а процесс просто остается висеть в памяти.

Подскажите, пожалуйста, как можно отловить эту ошибку

Спасибо.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Aндрей Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Aндрей (статус: 1-ый класс)
Вопрос отправлен: 12 февраля 2009, 17:53
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 13 февраля 2009, 11:19; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 12 февраля 2009, 19:11 [#1]:

надо попробовать скомпилировать с отладочной версией vcl. Для этого надо зайти в настройки компилятора и выставить галочку Use Debug VCL. После это обязательно сделать перекомпиляцию (Project -> Build)
Галочка "подтверждения прочтения" - вселенское зло.
Aндрей

Aндрей (статус: 1-ый класс), 13 февраля 2009, 09:36 [#2]:

по Break выкинуло на
procedure TWinControl.DefaultHandler(var Message);

на строку
Result := CallWindowProc(FDefWndProc, FHandle, Msg, WParam, LParam);


сама процедура

procedure TWinControl.DefaultHandler(var Message);
begin
if FHandle <> 0 then
begin
with TMessage(Message) do
begin
if (Msg = WM_CONTEXTMENU) and (Parent <> nil) then
begin
Result := Parent.Perform(Msg, WParam, LParam);
if Result <> 0 then Exit;
end;
case Msg of
WM_CTLCOLORMSGBOX..WM_CTLCOLORSTATIC:
Result := SendMessage(LParam, CN_BASE + Msg, WParam, LParam);
CN_CTLCOLORMSGBOX..CN_CTLCOLORSTATIC:
begin
SetTextColor(WParam, ColorToRGB(FFont.Color));
SetBkColor(WParam, ColorToRGB(FBrush.Color));
Result := FBrush.Handle;
end;
else
if Msg = RM_GetObjectInstance then
Result := Integer(Self)
else
Result := CallWindowProc(FDefWndProc, FHandle, Msg, WParam, LParam);
end;
if Msg = WM_SETTEXT then
SendDockNotification(Msg, WParam, LParam);
end;
end
else
inherited DefaultHandler(Message);
end;
Вадим К

Вадим К (статус: Академик), 13 февраля 2009, 11:19 [#3]:

Я думаю, что эта процедура нам не сильно поможет в устранении бага. Но на путь направит. Теперь, в момент бага надо просмотреть содержимое стека вызова процедур. и подымаясь вверх по нем, проследить, с какой известной вам функции был осуществлен переход сюда. Это окно можно вызвать либо через меню View - Stack Window, либо если версия делфи "помоложе", то оно само будет слева.
Теперь, что же могло произойти. судя с функции
Result := CallWindowProc(FDefWndProc, FHandle, Msg, WParam, LParam);
ей был передан "плохой" аргрумент. и подозреваю, что это скорее всего первый.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.02 сек.