Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.17;
Скачать: CL | DM;

Вниз

перехват вызовов процедур   Найти похожие ветки 

 
Мыш ©   (2004-02-06 07:13) [0]

Можно ли перехватывать все вызовы процедур в пределах программы, получая при этом имя как вызвавшей, так и вызываемой? Цель - создание текстового лога, чтобы отловить неуловимую ошибку.


 
KSergey ©   (2004-02-06 07:32) [1]

Имена в общем случае - нет. На этапе компиляции их уже нет.
Однако изучая отладочную информацию (информацию для отладчика) - можно, там это есть. Но и проект должен быть скомпилен с ней (и учитывать, что длдя дельфей она хранится не в exe, если не ошибаюсь).
Как - не знаю ;)
Н оточн овидел в новостях компонент на этом сайте упоминание библиотеки, которая при exception"ах раскручивала стек вызовов и это находила.
Если не ошибаюсь, что-то такое же есть в Jedi.

PS
А не проще ли в начало каждой процедуры просто тупо вставить OutLog("ProcName")? Может и "не красиво", рутинно, но есть ли время для этих изысков?
Хотя если есть что-то готовое - то, пожалуй, было бы интересно взять на вооружение, тем более, что отладчик ведь об этом знает, включая имена переменных...


 
Alexander666 ©   (2004-02-06 08:11) [2]

А как насчет HookMainWindow. По крайней мере перехват ведет :-)


 
имя   (2004-02-06 08:42) [3]

Удалено модератором


 
Dimka Maslov ©   (2004-02-06 08:53) [4]

"Взрослая" отладка производится при помощи трассировки и контрольных точек, расставляемых в подозрительных местах


 
Radionov Alexey ©   (2004-02-06 08:55) [5]

>мыщ (06.02.04 08:42) [3]
Как-то без этого обходился. Простым дебаггером. Обычно расставляю breakpointы, пока до глюка не доберусь. Так сказать, методом последовательных приближений.
А последовательность вызовов в текущий момент call stack можно посмотреть - это знаешь, конечно.

А в чем ошибка и ее "неуловимость" состоит?


 
KSergey ©   (2004-02-06 11:45) [6]

> [2] Alexander666 © (06.02.04 08:11)
> А как насчет HookMainWindow. По крайней мере перехват ведет
> :-)

Перхват чего? Дельфийских процедур?


 
Мыш ©   (2004-02-06 18:39) [7]

>А в чем ошибка и ее "неуловимость" состоит?
Ошибки конкретной сейчас нет, но иногда бывает так: выскочит нарушение доступа, а где - непонятно. После нажатия F7 курсор оказывается где-нибудь в конце модуля, например. Дается адрес, конечно, но для этого нужно хорошо в ассемблере разбираться.
Кроме того, "взрослая отладка" хорошо, когда ты и прога один на один. А если удаленно кто-то тестирует? И ошибка такого рода, которая не определяется всем мыслимым перебором возможных вариантов, а всплывает только у другого человека на другом компьютере? Тогда спасение - только лог-файл, ведущий хронометрическую запись всех событий, возможно значений ключевых
переменных.

>"Взрослая" отладка производится при помощи трассировки и контрольных точек, расставляемых в подозрительных местах
Никто и не спорит с этим способом. Но согласись, имея лог подозрительное место найдешь в десятки раз быстрее.


 
Cobalt ©   (2004-02-06 20:27) [8]

Пожалуй, в такой ситуации - только очень подробный лог - имя процедуры, некоторые контрольные значения, Адреса объектов, создаваемых/изменяемых динамически, возможно, их свойства (можно там даже AV поймать).



Страницы: 1 вся ветка

Текущий архив: 2004.02.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-53493
Lin7
2004-02-04 16:44
2004.02.17
Почему глючит TreeView и как с этим бороться?


6-53672
MaG
2003-12-12 18:07
2004.02.17
Скачивание файлов


7-53795
revo
2003-12-02 17:14
2004.02.17
crc16 и modbus


1-53591
Genry
2004-02-06 21:31
2004.02.17
Как правильно присвоить PChar переменной String


11-53444
EAccessViolation
2003-05-24 13:31
2004.02.17
MainMenu???!