调试两个程序,其中一个程序启动另一个程序

时间:2013-11-13 10:14:31

标签: c# c++ visual-studio-2010 debugging

有一个程序(用C#编写的WPF应用程序)调用另一个程序(用C ++编写的命令行程序)。它们都在同一个解决方案中。在某些时候,调用者通过使用System.Diagnostics.Process中提供的方法使用其他程序来完成一些工作。我想在测试这个项目时调试这两个程序。怎么做?是否有一些简单的方法,如“附加”,我们对图书馆做了什么?

- EDIT--
流程 A 启动流程 B 。然后 A 会一直等到 B 进程退出。此外, B 在命令提示符上非常小,如dir,很快就会退出。

4 个答案:

答案 0 :(得分:2)

  • 由于它已达到截止日期,因此没有时间用Wilbert建议的托管代码包装C ++。
  • 在单独的VS上运行这两个程序也不起作用(通过尝试确认),因为程序 B 仅在必要时由程序 A 运行,并且每次都运行用于启动 B 命令行参数是不同的,在运行时生成。 (即使在同一个VS中也无法完成,因为调试一个进程似乎暂停执行另一个进程)
  • 由于 B 是本机C ++应用程序,因此无法在程序中调用Debug。要访问visual studio扩展,项目需要是一个托管项目。由于我的VS版本存在问题,因此无法将当前项目转换为托管。 (安装Net Framework 4.5后,需要将VS 2010更新到SP1以便能够使用某些功能)

应用解决方案:

  1. A 的来源中,在 B 生成命令行参数的位置下方设置一个断点(我把它放在{{1}的位置被称为) e.g。

    proc.Start()
  2. 在调试模式下运行 A ,直到达到断点。

  3. 读取Process otherProcess = new Process(); ... otherProcess.StartInfo.Arguments = "abc" + foo() + "," + bar();// what we need ... otherProcess.Start(); // break-point is here 的值并复制该值以供日后使用。
  4. 安全退出调试 A (停止调试)。
  5. B 的命令行参数设置为复制值(项目属性>调试>命令行参数)
  6. 开始调试 B (右键单击项目> debug>启动新实例)。

答案 1 :(得分:1)

如果我理解正确,只需将调试器附加到其他进程即可。从Visual Studio的一个实例,您可以连接到多个进程,但不能将两个调试器连接到同一进程。但是,请确保将正确的调试器附加到每个进程,即C ++应用程序的本机调试器和WPF应用程序的托管调试器。

您可以在“进程”工具窗口中切换调试器进程(假设它们都在断点处暂停)。调用堆栈和所有其他更新为当前选定的进程。

答案 2 :(得分:0)

运行VS的另一个实例,打开解决方案并尝试连接到正在运行的进程 http://msdn.microsoft.com/en-us/library/vstudio/3s68z0b3.aspx

答案 3 :(得分:0)

您还可以编写一个使用C ++ / Cli的小类。在外面,你的类看起来像任何C#类,可以直接在C#中使用。但是在C ++ / Cli中,你可以自由地调用C ++。这样,您可以删除System.Diagnostics.Process的使用并直接使用其他程序。

这是前期的一些工作,但它允许您直接进入C ++代码,就像现在使用C#代码一样。