c++ - vs断点调试 - vs编译过程




在Visual Studio中调试使用CreateProcess产生的进程 (2)

我创建了一个产生子进程的Windows / C ++ / WTL应用程序。 这两个进程通过匿名管道进行通信。

我想能够调试子进程。

由于父项目和子项目在Visual Studio 2008中都有相同的解决方案,有什么办法可以告诉VS2008我希望调试器调试这两个过程吗?

当我用父进程启动调试器时,调试器不会在子进程代码中的任何断点上中断。

而且由于子进程是由父进程产生的,我不能想到一个简单的方法来附加子进程(可能通过另一个VS2008实例)。

任何见解非常感谢!


您可以暂时在调用子进程的启动代码中的某处调用DebugBreak() 。 这将导致Windows提示您是否要调试该进程。


你可以在你的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);

  ...
}

你可能想用#if _DEBUG或环境变量检查来包装它。





ipc