Я использую CreateProcess
с флагом DEBUG_ONLY_THIS_PROCESS
. Новый процесс создается, но недавно запущенное приложение ничего не делает, и когда я смотрю список процессов с Диспетчером задач, все, что я вижу, это имя файла exe с выделенной только 70 КБ памяти!Отладка с CreateProcess
Если я создаю процесс без знака DEBUG_ONLY_THIS_PROCESS
, приложение запускается отлично.
Это мой код:
function TDebugger.StartDebug;
var
ProcInfo: TProcessInformation;
ProcessCreationFlags: Cardinal;
StartupInfo: TStartupInfo;
DE: TDebugEvent;
begin
// == init process info
ZeroMemory(@ProcInfo, SizeOf(TProcessInformation));
// == init startup info
ZeroMemory(@StartupInfo, SizeOf(TStartupInfo));
with StartupInfo do begin
cb := SizeOf(TStartupInfo);
lpDesktop := '';
dwX := CW_USEDEFAULT;
dwY := CW_USEDEFAULT;
dwXSize := CW_USEDEFAULT;
dwYSize := CW_USEDEFAULT;
wShowWindow := SW_SHOWDEFAULT;
end;
// == Create the process
ProcessCreationFlags := DEBUG_ONLY_THIS_PROCESS;
if (not CreateProcess(PWideChar(Path), Nil, Nil, Nil, False, ProcessCreationFlags, Nil, PWideChar(CurrentDirectory), StartupInfo,
ProcInfo)) then
RaiseLastOSError;
end;
Я думаю, что есть некоторая функция API я должен вызвать после создания процесса, но я понятия не имею, что это такое. Может ли кто-нибудь помочь мне с этой проблемой?
Дополнительная информация: Мое главное приложение - IDE, и ему необходимо отладить приложение для своего плеера.
Я также пытаюсь создать пользовательский режим отладки. Могли ли вы создать свой отладчик? Не могли бы вы поделиться своим кодом или он будет доступен на github? Мой проект - проект с открытым исходным кодом на github, и я пытаюсь создать отладчик, используя dbgeng.dll (Debugger Engine) с Delphi. Любые советы были бы замечательными. –
@ThomasJaeger Я понял это и исправил проблему, однако, в конце концов, я использовал 'IPC', который в моем случае работал просто отлично. Это было давно, поэтому я не помню, что такое мой код. Сожалею. – Javid