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

C# 调试两个程序,其中一个启动另一个程序,c#,c++,visual-studio-2010,debugging,C#,C++,Visual Studio 2010,Debugging,有一个程序(用C#编写的WPF应用程序)调用另一个程序(用C++编写的命令行程序)。它们都在同一个解决方案中。在某些情况下,调用方通过使用System.Diagnostics.Process中提供的方法,使用另一个程序完成一些工作。我想在测试此项目时调试这两个程序。怎么做?有没有像“附加”这样的简单方法可以应用于图书馆 --编辑-- 进程A启动进程B。然后A等待进程B退出。此外,B命令提示符上的一些非常小的东西,如dir,它会很快退出。运行另一个VS实例,打开解决方案并尝试连接到正在运行的进程

有一个程序(用C#编写的WPF应用程序)调用另一个程序(用C++编写的命令行程序)。它们都在同一个解决方案中。在某些情况下,调用方通过使用
System.Diagnostics.Process
中提供的方法,使用另一个程序完成一些工作。我想在测试此项目时调试这两个程序。怎么做?有没有像“附加”这样的简单方法可以应用于图书馆

--编辑--

进程A启动进程B。然后A等待进程B退出。此外,B命令提示符上的一些非常小的东西,如
dir
,它会很快退出。

运行另一个VS实例,打开解决方案并尝试连接到正在运行的进程

如果我理解正确,只需将调试器附加到另一个进程。从一个VisualStudio实例可以附加到多个进程,但不能将两个调试器附加到同一进程。但是,要确保将正确的调试器附加到每个进程,即本地调试器到C++应用程序和托管调试器到WPF应用程序。
您可以从“进程工具”窗口在调试器进程之间切换(假定它们都在断点处暂停)。调用堆栈和所有其他调用堆栈将针对当前选择的进程进行更新。

您还可以编写一个使用C++/Cli的小类。从外观上看,您的类与任何C#类类似,可以直接从C#使用。但是在C++中,你可以自由调用C++。这样,您就可以取消System.Diagnostics.Process的使用,直接使用其他程序

这是一项工作,但它允许你直接进入C++代码,就像你现在使用C代码一样。p>

    <> LI>因为它是在截止期限内,没有时间来包装C++和托管代码,如威尔伯特建议的。李>
  • 在单独的VS上运行两个程序也不起作用(通过试用确认),因为程序B仅在程序A需要时运行,每次启动B命令行参数都不同,并且在运行时生成。(即使在相同的VS中也无法执行,因为调试一个进程似乎会暂停另一个进程的执行)
  • <> LI>程序中调用调试是不可能的,因为 b>强是一个本地C++应用程序。要访问visual studio扩展,项目必须是托管项目。由于我的VS版本存在问题,无法将当前项目转换为托管项目。(安装Net Framework 4.5后,VS 2010需要更新为SP1才能使用某些功能)
应用解决方案:

  • A的源代码中,在为B生成命令行参数的位置下方放置一个断点(我将其放置在调用
    proc.Start()
    的位置)。
    e、 g

  • 在调试模式下运行A,直到达到断点

  • 读取
    proc.StartInfo.Arguments
    的值,并复制该值以备将来使用
  • 安全退出调试A(停止调试)
  • B的命令行参数设置为复制的值(项目属性>调试>命令行参数)
  • 开始调试B(右键单击项目>调试>启动新实例)

  • 试着先启动第一个项目,然后启动另一个项目的新实例,这是同一个问题吗?也许你可以用调用方法代替运行进程?我想这是你问题的答案为什么?你可以使用VSI的同一个实例,我认为当前实例正在忙着调试当前程序,否则你是对的。+1我认为我实际上是朝着雷德蒙德的方向,当这个功能最终添加到VS时,我脱口而出了一个哈利路亚。你甚至可以在解决方案中以调试模式启动另一个进程,只需右键单击项目,并选择“调试新实例…”或类似选项(不记得确切的文本;sry)。
    Process otherProcess = new Process();
    ...
    otherProcess.StartInfo.Arguments = "abc" + foo() + "," + bar();// what we need
    ...
    otherProcess.Start(); // break-point is here