用VS调试嵌入在MFC程序里的WPF View代码

网友邮件问的,我把问答过程贴出来,希望对其他碰到相似问题的朋友有些帮助:

在工作中碰到这样一个问题,我用VS2008写了一个可执行程序,这个mfc程序里面嵌入了wpf view, 我用vs2010开发的ocx里面hold这个wpf view。我的问题是如果我用vs2008 可以调试mfc程序,碰到里面需要调用wpf程序的时候如何自动打开vs2010的环境调试。net的程序?

答:

你如果是调试的话,一个进程是不能同时被两个调试器同时附加的,如果你在用vs 2008调试mfc程序的话,默认你从mfc工程启动,vs 2008是采用本地调试(native debug)的方式附加调试mfc程序,程序启动后:

  1. 你可以选择VS 2008菜单里的“调试”-> “Detach from process” (不好意思,我手头上暂时没有中文版vs,不知道中文的翻译,只好写英文的原文),这样vs 2008就跟mfc进程脱离了。 
  2. 然后你可以用vs 2008,也可以用vs 2010调试mfc里的wpf代码,做法是,点击VS菜单里的“调试”-> “附加到进程(attach to process....)”,在新打开的“附加到进程”对话框中,在“Attach to: ”文本框的旁边选择“Select”。 
  3. 在弹出的“Select Code Type”对话框中选择“Debug these code types” ,在列表里选择“Managed (v4.0)”(如果你的wpf是4.0的话),或者”Managed(v2.0, v1.1, v1.0)”(如果你的wpf是2.0的话)。 
  4. 点击OK关闭“Select code type”对话框 
  5. 在“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调试的方法:
  1. 启动Visual studio,最好是2010,2008也可以。
  2. 选择VS菜单里的“File” – “Open” – “Project/Solution”
  3. 在打开项目对话框中选择你的MFC程序的exe文件(注意,是exe文件)。
  4. 然后在“Solution Explorer”里选择Exe并右键单击它,选择“Properties”
  5. 在属性对话框中,将“Debugger Type”默认的“Auto”改成“Mixed”。
  6. 然后你就可以在C++和C#代码里设置断点调试了。
  7. 如下图所示:

  

2、在工程里的方法:
  1. 用visual studio打开mfc工程
  2. 右键单击工程的属性
  3. 在工程属性页里选择“调试”,并将“调试器类型”改成“混合”
  4. 如下图所示:

 

 
3、附加的方法:
  1. 启动MFC程序,然后启动VS。
  2. 选择VS菜单里的“Debug” –  “Attach to process”
  3. 在弹出的“Attach to process”对话框里,在“Attach to: ”文本框的旁边选择“Select”。
  4. 在弹出的“Select Code Type”对话框中选择“Debug these code types” ,在列表里选择“Managed (v4.0)”(如果你的wpf是4.0的话),或者”Managed(v2.0, v1.1, v1.0)”(如果你的wpf是2.0的话)。
  5. 并勾上“Native”,表明同时调试managed和native代码。
  6. 点击OK关闭“Select code type”对话框
  7. 在“Available Process”列表中,找到你的进程,点击“Attach”就可以调试了。
  8. 如下图所示:

 

posted @ 2012-06-08 22:27  donjuan  阅读(2420)  评论(0编辑  收藏  举报