|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.12.2008, 14:55 | #1 |
Пользователь
Регистрация: 18.12.2007
Сообщений: 40
|
Отладка dll с хуком или Мистика на марше
Есть тестовое приложение. Устанавливается глобальный хук и каждые 20 символов a-z скидывает в лог.
Все так и происходит... почти. Хук устанавливается, это точно. Срабатывает не после 20, а после 2 символов и не пишет в лог. Начинаю отладку (проект на D6 прилагаю). На картинке - окно редактора. Для контроля записи в лог-файл использовал MessageDlg, который вы видите на картинке. Включил точку останова перед выдачей сообщения. Ожидается, что как только сработает хук, появится сообщение о записи... Здесь начинается мистика. После каждого второго символа выскакивает сообщение о записи. Но - лог-файл отсутствует, и мало того - не срабатывает breakpoint (см. картинку)!!! То есть, ж...а есть, а слова нету, как в анекдоте. Точки останова включены до запуска приложения, и в других местах благополучно тормозят исполнение. Извините за тупость, не понимаю, откуда берется сообщение, если исполнение не проходит через GlobalKeyBoardHook... А ведь не проходит же... Помогите, посмотрите приложение... ................................ Начинаю догадываться. DLL-ка загружена динамически. Но как тогда отлаживаться?! Последний раз редактировалось Tihon; 31.12.2008 в 15:11. Причина: уточнение |
31.12.2008, 15:13 | #2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
давай код и картинку.
точка останова не срабатывает из-за того что твоя DLL грузится во все GUI процессы, а Delphi отлавливает точки останова только в твоём приложении. |
31.12.2008, 15:23 | #3 |
Пользователь
Регистрация: 18.12.2007
Сообщений: 40
|
|
31.12.2008, 16:15 | #4 | |
Пользователь
Регистрация: 18.12.2007
Сообщений: 40
|
Цитата:
"malamut26.11.2007, 0:38 Реально. И намного проще. Если не хочешь так много запариваться, то понятное дело в Run->Parametrs dll указываешь программу, которая использует dll. Потом компилишь одно, другое. Затем запускаешь из проекта dll'ки, и когда она будет загружена (основная прога сделала LoadDll или чего-то типа того), то в дельфях нажимай Ctrl+Alt+M, там в списке dll выбирай свою, правой кнопкой, Reload Symbol Table, и указываешь путь к файлу dll. Всё, теперь должны все брейкпойнты работать как часы " Счас буду пробовать. |
|
31.12.2008, 16:33 | #5 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
Я для отладки консоль использую.
Сказал и загрустил от бесспорности своей правоты.
|
31.12.2008, 17:28 | #6 |
Пользователь
Регистрация: 18.12.2007
Сообщений: 40
|
Каким образом?
Я с Debug Windows -> Modules не вполне врубаюсь... Моя Dll загружена, остановы ставлю, - один хрен, не работают... Есть здесь какая-то тайна Короче, всех с Новым Годом, господа! Завтра, с утречка, со свежей головой, - пробьемся! |
31.12.2008, 19:30 | #7 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
AllocConsole() и пошел - Write()\WriteLl().
Да все, всем всего. Завтра насоветуем =)
Сказал и загрустил от бесспорности своей правоты.
|
02.01.2009, 12:39 | #8 | |
Пользователь
Регистрация: 18.12.2007
Сообщений: 40
|
Цитата:
И, конечно, с наступившим Новым Годом. Все таки, Бык - не какая-то Крыса... |
|
02.01.2009, 13:55 | #9 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
В консоль можно выводить значения в реальном времени. для меня это кажется намного удобнее чем все время жать ок.
А вообще ставить брекпоинты внутри хука - чревато.
Сказал и загрустил от бесспорности своей правоты.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
.dll или .so для php | mv28jam | PHP | 3 | 08.12.2008 16:20 |
Проблема с хуком, Делаю подмену клавиш мыши | zhefran | Win Api | 12 | 17.04.2008 18:03 |
DLL или как работать со стороней программой??? | nimf | Общие вопросы Delphi | 2 | 15.04.2008 17:11 |
мистика в delphi | steck | Общие вопросы Delphi | 4 | 27.03.2007 23:57 |