我们有一个C ++ Win32应用程序,它使用Qt的QProcess(无疑是CreateProcess()的包装器),一个辅助的“从属”程序产生。
不幸的是,在使用Visual Studio 2008调试系统时,调试器不会自动附加到生成的进程。
我知道可以通过__debugbreak()以编程方式触发调试器断点,但是从启动时,奴隶程序可能会立即启动“选择一个程序来调试这个”窗口,因为我们必须参加比赛手动附加到新进程?
答案 0 :(得分:4)
使用Image File Execution Options。您可以将Visual Studio即时调试器指定为要附加到进程的默认调试器。
如果您正在使用command-line debuggers,则可以使用ntsd -o
自动调试子进程。
答案 1 :(得分:2)
我从阅读Jeffrey Richter的“Windows编程应用程序”中学到的另一个巧妙的技巧
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
图像加载器将创建您的进程并加载在注册表中输入的所有DLL。这将调用DLLmain,你的断点将被命中。
注意:为避免调试所有应用程序,请使用“GetModuleBasename”检查进程名称,并仅为您感兴趣的进程调用断点。