2013-08-12 2 views
0

Я использую 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, и ему необходимо отладить приложение для своего плеера.

+0

Я также пытаюсь создать пользовательский режим отладки. Могли ли вы создать свой отладчик? Не могли бы вы поделиться своим кодом или он будет доступен на github? Мой проект - проект с открытым исходным кодом на github, и я пытаюсь создать отладчик, используя dbgeng.dll (Debugger Engine) с Delphi. Любые советы были бы замечательными. –

+0

@ThomasJaeger Я понял это и исправил проблему, однако, в конце концов, я использовал 'IPC', который в моем случае работал просто отлично. Это было давно, поэтому я не помню, что такое мой код. Сожалею. – Javid

ответ

4

Когда вы создаете процесс для отладки, с DEBUG_ONLY_THIS_PROCESS, процесс фактически не запускается. Он ждет, когда ваш отладчик начнет работу. Итак, да, вам нужно вызвать некоторые функции, чтобы запустить процесс. Теперь вам нужно написать свой отладчик! Основной темой которого является ваш цикл отладчика.

Некоторые ссылки, которые могут помочь:

+0

Спасибо, Дэвид! ;) – Javid

Смежные вопросы