获取Win32程序在启动时请求调试器?

时间:2009-10-13 16:34:38

标签: c++ windows visual-studio qt winapi

我们有一个C ++ Win32应用程序,它使用Qt的QProcess(无疑是CreateProcess()的包装器),一个辅助的“从属”程序产生。

不幸的是,在使用Visual Studio 2008调试系统时,调试器不会自动附加到生成的进程。

我知道可以通过__debugbreak()以编程方式触发调试器断点,但是从启动时,奴隶程序可能会立即启动“选择一个程序来调试这个”窗口,因为我们必须参加比赛手动附加到新进程?

2 个答案:

答案 0 :(得分:4)

使用Image File Execution Options。您可以将Visual Studio即时调试器指定为要附加到进程的默认调试器。

如果您正在使用command-line debuggers,则可以使用ntsd -o自动调试子进程。

答案 1 :(得分:2)

我从阅读Jeffrey Richter的“Windows编程应用程序”中学到的另一个巧妙的技巧

  1. 在DLL_PROCESS_ATTACH案例中的DLLMain()中调用DebugBreak()创建一个DLL
  2. 在注册表中添加新DLL的路径(以逗号分隔的列表):
  3. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
    

    图像加载器将创建您的进程并加载在注册表中输入的所有DLL。这将调用DLLmain,你的断点将被命中。

    注意:为避免调试所有应用程序,请使用“GetModuleBasename”检查进程名称,并仅为您感兴趣的进程调用断点。