Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.59 MB
Время: 0.041 c
6-1086871978
Softal
2004-06-10 16:52
2004.08.08
Сеть в DOS


1-1090933420
Slaga
2004-07-27 17:03
2004.08.08
Проблемы с dll


4-1088159657
pavel_guzhanov
2004-06-25 14:34
2004.08.08
Как прочитать данные с PCI шины?


14-1089707695
KosilkA
2004-07-13 12:34
2004.08.08
Вот же гадость! (portal.tetki.ru)


14-1090634593
Думкин
2004-07-24 06:03
2004.08.08
С днем рождения! 24 июля