14 c++ windows debugging ipc visual-studio
我创建了一个生成子进程的Windows/C++/WTL应用程序.这两个进程通过匿名管道进行通信.
我希望能够调试子进程.
由于父项目和子项目在Visual Studio 2008中都处于相同的解决方案中,有没有办法告诉VS2008我希望调试器调试这两个进程?
当我使用父进程启动调试器时,调试器不会在子进程代码中的任何断点上中断.
由于子进程是由父进程生成的,因此我无法想到一个简单的方法来附加子进程(可能通过VS2008的另一个实例).
任何见解都非常感谢!
Han*_*ant 12
有很多选择:
您可以使用Debug + Attach通过调试器的一个实例调试多个.exes.但是我总是使用两个Visual Studio实例,在第二个实例中使用Debug + Attach.
你可以在子代码中放一个__debugbreak(),JIT调试器窗口会提示你选择一个调试器.
您可以使用"映像文件执行选项"注册表项在子.exe启动后立即自动启动调试器.添加名为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\YourApp.exe的密钥,将其"Debugger"值设置为"vsjitdebugger.exe"
您可以在调用周围放置一个全局命名互斥体CreateProcess,然后尝试在子进程中获取该互斥体。如果您随后在调用上设置断点CreateProcess,则您应该有时间在子进程执行任何实质性操作之前附加到该子进程。
main请注意,您可能会错过子进程中之前发生的任何事情。
编辑:举个例子,像这样的东西,未经测试:
// parent.cpp
HANDLE hMutex = ::CreateMutex(NULL, TRUE, "Global\\some_guid");
::CreateProcess(...);
::ReleaseMutex(hMutex); // breakpoint here
::CloseHandle(hMutex);
// child.cpp
int main(...)
{
HANDLE hMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, "Global\\some_guid");
::WaitForSingleObject( hMutex, INFINITE );
::CloseHandle(hMutex);
...
}
Run Code Online (Sandbox Code Playgroud)
您可能希望#if _DEBUG用环境变量检查来包装它。
| 归档时间: |
|
| 查看次数: |
6003 次 |
| 最近记录: |