用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. 如下图所示:

 


本文转自 donjuan 博客园博客,原文链接:  http://www.cnblogs.com/killmyday/archive/2012/06/08/2542350.html ,如需转载请自行联系原作者


相关文章
|
12月前
|
C#
WPF防止程序多次运行
WPF防止程序多次运行
136 0
|
12月前
|
C#
4.使用代码和未经编译的XAML创建WPF应用程序
4.使用代码和未经编译的XAML创建WPF应用程序
58 0
|
12月前
|
C# C++ Windows
3.只使用代码创建WPF应用程序
3.只使用代码创建WPF应用程序
81 0
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
|
Web App开发 监控 前端开发
C# WPF 嵌入网页版WebGL油田三维可视化监控
C# WPF 嵌入网页版WebGL油田三维可视化监控
C# WPF 嵌入网页版WebGL油田三维可视化监控
|
Java C# 程序员
WPF程序中的弱事件模式
原文:WPF程序中的弱事件模式 在C#中,得益于强大的GC机制,使得我们开发程序变得非常简单,很多时候我们只需要管使用,而并不需要关心什么时候释放资源。但是,GC有的时并不是按照我们所期望的方式工作。 例如,我想实现一个在窗口的标题栏中实时显示当前的时间,一个比较常规的做法如下:     var...
1087 0
|
C#
WPF如何去除调试的黑框?
WPF如何去除调试的黑框?
514 0
WPF如何去除调试的黑框?
|
C#
WPF Path.Data 后台代码赋值
Path path = new Path(); string sData = "M 250,40 L200,20 L200,60 Z"; var converter = TypeDescriptor.
1784 0
|
C# Windows
在WPF中,如何得到任何Object对象的XAML代码?
原文:在WPF中,如何得到任何Object对象的XAML代码? 在WPF中,可以使用System.Windows.Markup.XamlWriter.Save(objName)得到任何Object对象的XAML代码。
770 0
|
C#
【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?
原文:【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cf884a91-c135-447d-b16b-214d2d9e9972 有时有些特殊的程序需要这样处理。
954 0