-Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в community_coding

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.12.2004
Записей:
Комментариев:
Написано: 536


Пошаговое выполнение программы в Delphi7

+ в цитатник

Cообщение скрыто для удобства комментирования.
Прочитать сообщение


dimaker   обратиться по имени Re: Пошаговое выполнение программы в Delphi7 Среда, 20 Декабря 2006 г. 11:35 (ссылка)
))
В колонках играет: Планка - убиваю роботов

LI 5.09.15
Ответить С цитатой В цитатник
ZardoZ   обратиться по имени Среда, 20 Декабря 2006 г. 11:44 (ссылка)
Вешается, если в любом месте брэйкпоинт ставить? Пробовал на другой версии дельфы? У тебя отладчик установлен, который с дельфой ставится?

Интересно было бы посмотреть на это :).
Я делал подобное когда-то, не помню, чтобы у меня такие проблемы были.
Ответить С цитатой В цитатник
aDolphin   обратиться по имени Ответ в community_coding; Пошаговое выполнение программы в Delphi7 Среда, 20 Декабря 2006 г. 12:00 (ссылка)
Я сейчас нахожусь - на работе

хм.. странно. Может сама делфя глючит?
Покажи текст глючной процедуры.

Ответить С цитатой В цитатник
Тузбубен   обратиться по имени Среда, 20 Декабря 2006 г. 17:44 (ссылка)
Может, компилируешь в Release-конфигурации? Хотя, наверное, тогда должен был бы просто игнорировать брейкпоинты...
Ответить С цитатой В цитатник
Dim_K   обратиться по имени Ответ в community_coding; Пошаговое выполнение программы в Delphi7 Четверг, 21 Декабря 2006 г. 11:32 (ссылка)
Исходное сообщение ZardoZ: Вешается, если в любом месте брэйкпоинт ставить? Пробовал на другой версии дельфы? У тебя отладчик установлен, который с дельфой ставится?

На самом деле брэйкпоинтом я не очень часто пользуюсь, чаще F4, а потом F7 или F8, но по сути это ж одно и то же. Вешается не в любом месте, если сразу начинать пошаговое выполнение то до строки Application.Run; доходит нормально, но в самом модуле формы в любом месте вешается.

Пробовал еще на Turbo Delphi 2006, там, похоже, та же фигня, по крайней мере на первой же строке обработчика OnCreate формы повесился.

Дебагер стандартный из поставки дельфи

Комментирование переопереленной функции WndProc не помогает, видимо не она виновата

LI 5.09.15
Ответить С цитатой В цитатник
ZardoZ   обратиться по имени Четверг, 21 Декабря 2006 г. 11:59 (ссылка)
Тогда код в студию.
Ответить С цитатой В цитатник
Dim_K   обратиться по имени Ответ в community_coding; Пошаговое выполнение программы в Delphi7 Четверг, 21 Декабря 2006 г. 22:24 (ссылка)
ZardoZ, нашел кто вешает, но от этого не легче, вешается при установке ловушки, при вызове hook(true, frmMain.Handle); при пошаговом проходе этой строки вешается.
код библиотеки для ловушки

library keyhook;

uses
SysUtils,
Windows,// dialogs,
Messages;

const
MMFName: PChar = 'KeyMMF'; // имя объекта файлового отображения

{структура, поля которой будут отображены в файл подкачки}
type
PGlobalDLLData = ^TGlobalDLLData;
TGlobalDLLData = packed record
SysHook: HWND; // дескриптор установленной ловушки
MyAppWnd: HWND; // дескриптор нашего приложения
end;

var
GlobalData: PGlobalDLLData;
MMFHandle: THandle;
WM_MYKEYHOOK: Cardinal;

function KeyboardProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
if code < 0 then
begin
Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Exit;
end;

SendMessage(GlobalData^.MyAppWnd, WM_MYKEYHOOK, wParam, lparam);
CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Result:= 0;
end;

{Процедура установки HOOK-а}
procedure hook(switch : Boolean; hMainProg: HWND) export; stdcall;
begin
if switch=true then
begin
{Устанавливаю HOOK, если он не установлен (switch=true). }
GlobalData^.SysHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0);
GlobalData^.MyAppWnd:= hMainProg;
if GlobalData^.SysHook = 0 then
MessageBox(0, 'Cannot install HOOK!', 'Message from keyhook.dll', 0);
end
else
begin
{Удаляю функцию-фильтр, если она установлена (т.е. switch=false). }
if not UnhookWindowsHookEx(GlobalData^.SysHook) then
MessageBox(0, 'Cannot unistall HOOK', 'Message from keyhook.dll', 0);

end;
end;

procedure OpenGlobalData();
begin
WM_MYKEYHOOK:= RegisterWindowMessage('WM_MYKEYHOOK');
MMFHandle:= CreateFileMapping(DWord(-1), nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName); // можно так, но лучше: см. след. строку
MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);
if MMFHandle = 0 then
begin
MessageBox(0,'Error: Can''t set hook','Message from keyhook.dll', MB_OK+MB_ICONERROR);
Exit;
end;

{отображаем глобальные данные на АП вызывающего процесса и получаем указатель
на начало выделенного пространства}
GlobalData:= MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
if GlobalData = nil then
begin
CloseHandle(MMFHandle);
MessageBox(0, 'Can''t make MapViewOfFile', 'Message from keyhook.dll', 0);
Exit;
end;

end;

procedure CloseGlobalData();
begin
UnmapViewOfFile(GlobalData);
CloseHandle(MMFHandle);
end;

procedure DLLEntryPoint(dwReason: DWord); stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH: OpenGlobalData;
DLL_PROCESS_DETACH: CloseGlobalData;
end;
end;

exports hook;

begin
{назначим поцедуру переменной DLLProc}
DLLProc:= @DLLEntryPoint;
{вызываем назначенную процедуру для отражения факта присоединения данной
библиотеки к процессу}
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.


Виснет при прохождении строки, если закоментировать, то при прохождении следующего за ней условного оператора

GlobalData^.MyAppWnd:= hMainProg;


LI 5.09.15
Ответить С цитатой В цитатник
Комментировать К дневнику Страницы: [1] [Новые]
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку