Текущий архив: 2004.08.08;
Скачать: CL | DM;
ВнизОтладка Найти похожие ветки
← →
Piter © (2004-07-20 15:47) [40]Dmitriy O. © (20.07.04 15:24) [38]
П 2 Выполнить->Добавить точу останова->На модуль Не подойдет ?
Нет, там же брекпоинты на загрузку внешних DLL можно только поставить. Кстати, поставил на NTDLL - программа стала ловить AV при запуске...
← →
Суслик © (2004-07-20 15:51) [41]корявенько к сожалению этот data breakpoint для стековых переменных работает :(((
А вообще штука прикольная :)
← →
Igorek © (2004-07-20 16:18) [42]> 2) Можно ли чтобы программа останавливалась при "входе"
> в определенный модуль? Зачастую бывает, что то, что творится
> в каком-то модуле не важно и надо просто отловить момент,
> когда "выполнение" покинет данный модуль.
Можно напр. использовать директиву {$D-}. Ставишь ее у начале модуля, который тебя не интересует. Для него не будет генерироваться отладочная информация. При пошаговом выполнении этот модуль показываться не будет.
---
А вообще - покликайте в Дельфе на все что видите - поисследуйте.
← →
Igorek © (2004-07-20 16:19) [43]
> 3) Можно ли чтоб программа останавливалась, когда вызывается
> определенная WinApi функция?
Вроде избитая тема, так что можно поискать ответ.
← →
Piter © (2004-07-20 18:05) [44]Igorek © (20.07.04 16:19) [43]
Вроде избитая тема
так можно? Лично я ни разу такой темы не видел, хотя на форумах давно...
Суслик © (20.07.04 15:51) [41]
корявенько к сожалению этот data breakpoint для стековых переменных работает :(((
Ибо нефиг контроллировать переменную цикла :)
← →
Суслик © (2004-07-20 18:11) [45]
> Ибо нефиг контроллировать переменную цикла :)
дело не в этом, а в том, что адрес переменных в стеке не постоянен - меняется при разных от запуска к запуску процеруры.
> так можно? Лично я ни разу такой темы не видел, хотя на
> форумах давно...
Перехват api вызовов. Действительно избитая тема. Сам не делал - не интересно. Но это описано: 1) в рихтере 2) в #1 2004 RSDN было (на сайте их посмотри)
← →
DiamondShark © (2004-07-20 18:30) [46]
> дело не в этом, а в том, что адрес переменных в стеке не
> постоянен
Ага. Или вообще не в стеке, а в регистре.
Ужас!
← →
Суслик © (2004-07-20 18:36) [47]
> DiamondShark © (20.07.04 18:30) [46]
не умничайте, ясно о чем я говорил.
про использование регистров я представьте тоже знаю.
← →
Piter © (2004-07-20 18:45) [48]Суслик © (20.07.04 18:11) [45]
Перехват api вызовов
блин, вы чего говорите? Я про ОТЛАДЧИК ДЕЛЬФИ. Какого рожна мне перехватывать вызовы API функций?
Я к тому, например, что в программе идет какая-нибудь обработка, особенно актуально в недрах VCL. И трассировать это просто нету времени. Но знаю, что в результате должнна быть вызвана некая WinApi функция и вот мне интересно, например, с какими параметрами она будет вызвана, при этом отладчик должен остановить программу, чтобы я там решил что делать дальше...
← →
Piter © (2004-07-20 18:46) [49]Суслик © (20.07.04 18:36) [47]
он сейчас скажет, что тебя надо было убивать при рождении за такие выскаывания :)
← →
Суслик © (2004-07-20 18:50) [50]
> Piter © (20.07.04 18:46) [49]
> Суслик © (20.07.04 18:36) [47]
>
> он сейчас скажет, что тебя надо было убивать при рождении
> за такие выскаывания :)
его дело.
По поводу этого
> Перехват api вызовов
я так понял, что исходная тема трансформировалась в перехват api вызовов. Нет? Задача осталось - из ide ловить моменты? Тогда не знаю...
← →
DiamondShark © (2004-07-20 19:32) [51]Можно и из IDE ловить. Немножко трансректально, но можно.
Компилим проект. Нажимаем F8, останавливаемся на первом begin.
Открываем окно CPU. Нажимаем ctrl-G (Go to address) и вводим адрес интересующей функции в виде @CreateWindowEx (можно с указанием модуля @Windows.CreateWindowsEx).
Попадаем на сгенерённую компилером заглушку для статической линковки DLL вида jmp dword ptr [XXXXXXXX].
Ставим брекпоинт (F5) и пускаем программу дальше.
← →
VMcL © (2004-07-22 12:19) [52]>>DiamondShark © (20.07.04 19:32) [51]
ИМХО, лучше на jmp dword ptr [...] нажать Ctrl+F (Follow) и поставить BP там, тогда поймаем даже те вызовы, которые делаются посредством GetProcAddress().
← →
DiamondShark © (2004-07-22 12:32) [53]Можно и так.
← →
Piter © (2004-07-22 13:15) [54]Если указывать перейти на адрес @Windows.SendMessage - то дебагер говорит, что не знает что такое windows, если на @sendmessage - то не знает что такое sendmessage.
А вообще все оказалось проще :) Я просто не ожидал...
Надо в юните Windows просто поставить брекпоинт напротив объявленной функции, вот и все :)
Остался вопрос:
2) Можно ли чтобы программа останавливалась при "входе" в определенный модуль? Зачастую бывает, что то, что творится в каком-то модуле не важно и надо просто отловить момент, когда "выполнение" покинет данный модуль
← →
Суслик © (2004-07-22 13:17) [55]
> Надо в юните Windows просто поставить брекпоинт напротив
> объявленной функции, вот и все :)
но для этого его надо сначала в проект подключить или директории настроить...
← →
VMcL © (2004-07-22 16:55) [56]>>Суслик © (22.07.04 13:17) [55]
>но для этого его надо сначала в проект подключить
Это слишком правильно, чтоб с этим можно было не согласиться. Надеюсь дописать вuses ... Windows ...;
это не проблема? ;)
>или директории настроить
Настраивать не так уж много: Browsing path (однократно) + Use Debug DCU.
← →
Piter © (2004-07-22 17:01) [57]Суслик © (22.07.04 13:17) [55]
ну уж блин не знаю программы, где не подключен модуль windows и messages...
← →
VMcL © (2004-07-22 17:10) [58]>>Piter © (22.07.04 17:01) [57]
>ну уж блин не знаю программы, где не подключен модуль windows и messages...program HelloPiter;
{$APPTYPE CONSOLE}
begin
WriteLn("Hello, Piter!");
end.
:))
P.S. Ну с Windows.pas согласен - почти всегда. А вот messages запросто может не быть. Например, в DLL. Ну чем DLL не программа? :)
← →
Суслик © (2004-07-22 17:38) [59]
> VMcL © (22.07.04 16:55) [56]
Так что я не так сказал?:)))))
Если просто в uses подключить без путей и флажков, то никакие бреакпоинты работать не будут.
либо подключать в проект, либо пути прописывать, use debug dcu.
иначе никак :)))
ЗЫ.
по поводу возможности подключения windows к проекту вообще сомневаютсь, что это возможно. Многие другие модули запросто, например forms помнюю трассировал как-то так. Про windows не знаю - сам не пробовал.
Так что мое утверждение
> но для этого его надо сначала в проект подключить или директории
> настроить...
было комментарием к утверждению piter
> Надо в юните Windows просто поставить брекпоинт напротив
> объявленной функции, вот и все :)
Особенно к помеченному жирным.:)))
Вы хотите об этом поговорить? :)))
← →
VMcL © (2004-07-22 17:45) [60]>>Суслик © (22.07.04 17:38) [59]
Уже нет :)
Я замечания свои написал. Думаю, что их достаточно.
← →
Суслик © (2004-07-22 17:47) [61]да я в общем-то не вам, про поговорить.
вроде с вами и не расходимся во мнении.
← →
VMcL © (2004-07-22 18:04) [62]>>Суслик © (22.07.04 17:47) [61]
>да я в общем-то не вам
Я привык в Сети общаться на "ты" ;)
P.S. "Вам" и "вам" разные вещи.
← →
han_malign © (2004-07-22 18:28) [63]>либо пути прописывать
- вообще-то они изначально прописаны, Delphi прекрасно знает где у него ...\DelphiN\Source\... лежит. Во всяком случае, у меня, с этим, проблем никогда не было.
← →
Суслик © (2004-07-22 18:31) [64]
> проблем никогда не было.
у меня были, наверное поудалял когда-то в трудовом порыве :)
Страницы: 1 2 вся ветка
Текущий архив: 2004.08.08;
Скачать: CL | DM;
Память: 0.57 MB
Время: 0.041 c