1

我正在使用CreateProcess标志DEBUG_ONLY_THIS_PROCESS。新进程已创建,但新运行的应用程序不执行任何操作,当我使用任务管理器查看进程列表时,我看到的只是 exe 文件的名称,仅分配了 70KB 内存!

如果我创建没有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,它需要调试它的播放器应用程序。

4

1 回答 1

5

当您使用 DEBUG_ONLY_THIS_PROCESS 创建用于调试的进程时,该进程实际上并没有开始运行。它等待您的调试器启动它。所以,是的,你必须调用一些函数来启动和运行进程。您现在需要编写调试器!其中的主体是您的调试器循环。

一些可能有帮助的参考资料:

于 2013-08-12T16:34:02.733 回答