在工作中碰到这样一个问题,我用VS2008写了一个可执行程序,这个mfc程序里面嵌入了wpf view, 我用vs2010开发的ocx里面hold这个wpf view。我的问题是如果我用vs2008 可以调试mfc程序,碰到里面需要调用wpf程序的时候如何自动打开vs2010的环境调试。net的程序?
答:
你如果是调试的话,一个进程是不能同时被两个调试器同时附加的,如果你在用vs 2008调试mfc程序的话,默认你从mfc工程启动,vs 2008是采用本地调试(native debug)的方式附加调试mfc程序,程序启动后:
- 你可以选择VS 2008菜单里的“调试”-> “Detach from process” (不好意思,我手头上暂时没有中文版vs,不知道中文的翻译,只好写英文的原文),这样vs 2008就跟mfc进程脱离了。
- 然后你可以用vs 2008,也可以用vs 2010调试mfc里的wpf代码,做法是,点击VS菜单里的“调试”-> “附加到进程(attach to process....)”,在新打开的“附加到进程”对话框中,在“Attach to: ”文本框的旁边选择“Select”。
- 在弹出的“Select Code Type”对话框中选择“Debug these code types” ,在列表里选择“Managed (v4.0)”(如果你的wpf是4.0的话),或者”Managed(v2.0, v1.1, v1.0)”(如果你的wpf是2.0的话)。
- 点击OK关闭“Select code type”对话框
- 在“Available Process”列表中,找到你的进程,点击“Attach”就可以调试了。
附图是我的VS界面,你可以对着我上面的步骤,和VS截图操作一下。
问:
我的意思是,同时调试,vs08调试MFC,vs2010调试wpf,因为两者之间有交互。而且vs2010写的是个ocx被mfc调用,想在被启动调用的时候打开vs2010并加载wpf的pdb文件。二者可以协同工作
答:
同时调试mfc和wpf代码的方法是有的,但是你不能用两个调试器,因为一个进程是不能同时被两个调试器同时附加的,但是你可以在一个调试器里同时调试C++和WPF代码,有几种方法:
下面的例子是用VS自带的例子程序来演示的,文件路径在:
\Program Files\Microsoft Visual Studio 10.0\Samples\1033\VC2010Samples\C++\MFC\WpfInterop
如果你看不到上面路径的话,将\Program Files\Microsoft Visual Studio 10.0\Samples\1033\VC2010Samples.zip解压就可以了。
1、直接打开exe调试的方法:
- 启动Visual studio,最好是2010,2008也可以。
- 选择VS菜单里的“File” – “Open” – “Project/Solution”
- 在打开项目对话框中选择你的MFC程序的exe文件(注意,是exe文件)。
- 然后在“Solution Explorer”里选择Exe并右键单击它,选择“Properties”
- 在属性对话框中,将“Debugger Type”默认的“Auto”改成“Mixed”。
- 然后你就可以在C++和C#代码里设置断点调试了。
- 如下图所示:
2、在工程里的方法:
- 用visual studio打开mfc工程
- 右键单击工程的属性
- 在工程属性页里选择“调试”,并将“调试器类型”改成“混合”
- 如下图所示:
3、附加的方法:
- 启动MFC程序,然后启动VS。
- 选择VS菜单里的“Debug” – “Attach to process”
- 在弹出的“Attach to process”对话框里,在“Attach to: ”文本框的旁边选择“Select”。
- 在弹出的“Select Code Type”对话框中选择“Debug these code types” ,在列表里选择“Managed (v4.0)”(如果你的wpf是4.0的话),或者”Managed(v2.0, v1.1, v1.0)”(如果你的wpf是2.0的话)。
- 并勾上“Native”,表明同时调试managed和native代码。
- 点击OK关闭“Select code type”对话框
- 在“Available Process”列表中,找到你的进程,点击“Attach”就可以调试了。
- 如下图所示: