Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Вниз

Отладка   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.032 c
14-1090491340
DJ DIZzY
2004-07-22 14:15
2004.08.08
А как сделать кнопку выход???


14-1090230483
Turbid
2004-07-19 13:48
2004.08.08
RxLib


3-1089902181
Leech
2004-07-15 18:36
2004.08.08
SQL запрос на Paradox


3-1089714731
Dmitriy O.
2004-07-13 14:32
2004.08.08
Интербазе "INTERNAL ERROR"


3-1089968904
VadimKV
2004-07-16 13:08
2004.08.08
Как получить Код (скрипт) всей БД в FB1.5???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский