有一个程序(用 C# 编写的 WPF 应用程序)调用另一个程序(用 C++ 编写的命令行程序)。他们都在同一个解决方案中。在某些时候,调用者通过使用其他程序通过使用System.Diagnostics.Process
. 我想在测试这个项目时调试这两个程序。怎么做?是否有一些简单的方法,例如我们对库执行的“附加”?
--EDIT--
进程A启动进程B。然后A等待直到进程B退出。此外,B非常小的东西,例如dir
快速退出的命令提示符。
有一个程序(用 C# 编写的 WPF 应用程序)调用另一个程序(用 C++ 编写的命令行程序)。他们都在同一个解决方案中。在某些时候,调用者通过使用其他程序通过使用System.Diagnostics.Process
. 我想在测试这个项目时调试这两个程序。怎么做?是否有一些简单的方法,例如我们对库执行的“附加”?
--EDIT--
进程A启动进程B。然后A等待直到进程B退出。此外,B非常小的东西,例如dir
快速退出的命令提示符。
应用解决方案:
在A 的源代码中,在为B生成命令行参数的位置下方放置一个断点(我把它放在proc.Start()
调用的位置)。
例如
Process otherProcess = new Process();
...
otherProcess.StartInfo.Arguments = "abc" + foo() + "," + bar();// what we need
...
otherProcess.Start(); // break-point is here
在调试模式下运行A直到到达断点。
proc.StartInfo.Arguments
并复制该值以供以后使用。如果我理解正确,只需将调试器附加到另一个进程。从 Visual Studio 的一个实例中,您可以附加到多个进程,但不能将两个调试器附加到同一个进程。但是,请确保将正确的调试器附加到每个进程,即本机调试器连接到 C++ 应用程序,托管调试器连接到 WPF 应用程序。
您可以从“进程”工具窗口在调试器进程之间切换(假设它们都在断点处暂停)。调用堆栈和所有其他堆栈都针对当前选定的进程进行更新。
您还可以编写一个使用 C++/Cli 的小类。在外部,您的类看起来像任何 C# 类,并且可以直接从 C# 中使用。但是在 C++/Cli 内部,你可以自由调用 C++。这样,您可以删除 System.Diagnostics.Process 的使用并直接使用其他程序。
这是一些前期工作,但它允许您像现在处理 C# 代码一样直接进入 C++ 代码。
运行另一个 VS 实例,打开解决方案并尝试连接到正在运行的进程 http://msdn.microsoft.com/en-us/library/vstudio/3s68z0b3.aspx