我目前正在开发一个由五个独立的可执行文件组成的应用程序,这些可执行文件通过ActiveMQ进行通信。我有一个包含五个可执行项目的Visual Studio解决方案。其中一个项目(launcher.exe)从其本地文件夹中将其他四个项目作为单独的进程启动。因此,启动器项目被设置为“启动项目”,因此,由于我对VS2005的了解有限,它是唯一可以设置断点和调试的项目。
如果启动器项目是从VS执行的唯一项目,有没有办法在我的单个VS解决方案中为我的五个c ++项目设置多个断点并同时调试它们?
注意: 通过Visual Studio手动启动每个项目的新实例不是一个选项,因为它们的执行需要由launcher.exe同步。 / em>的
如果这是令人费解的话我道歉,这是我能解释的最好的。在此先感谢您的帮助!
答案 0 :(得分:5)
您需要的是在“工具”菜单中:“附加到进程”。这为您提供了正在运行的进程列表,并允许您将调试器附加到这些进程。
对于本地调试,传输和限定符应保留其默认值。列表上方的Attach To值确定您将要执行的调试类型(本机或托管是最常见的类型),通常调试器也可以在此处找出一个好的默认值。
主要有趣的部分是进程列表 - 在此列表中查找要调试的子进程。找到并选择该过程后,单击右下角的“附加”(或者只需双击该过程),调试器将附加到该过程并开始调试。
您可能还想启用“调试位置”工具栏,该工具栏提供了一种将调试器的焦点更改为您附加到的各种进程和线程的方法。一个Visual Studio实例中的多进程调试可能很棘手,因此您始终可以考虑启动单独的实例来调试每个不同的进程。
另一个棘手的方面是调试子进程的初始启动。通常,您想要调试的事情在您可以连接调试器之前发生,因此您需要某种方法来使进程等待您做好准备。在C ++中执行此操作的简单方法是使用IsDebuggerPresent函数。尝试将此代码添加到main()函数(或等效函数)的最开头:
while( !IsDebuggerPresent() )
Sleep( 500 );
或者尝试使用C#代码:
while( !System.Diagnostics.Debugger.IsAttached )
System.Threading.Thread.Sleep( 500 );
答案 1 :(得分:1)
您可以手动运行启动器(在visual studio之外,或使用< ctrl-f5>),然后在启动后附加到要调试的进程,一次选择一个。如果它是您的解决方案中的一个项目,您可以设置断点,并在附加调试器时将它们拾取。
答案 2 :(得分:1)