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

     

  • 相关阅读:
    问题:Failed to execute goal org.apache.maven.plugins:mavencompilerplugin:3.5.1:compile (defaultcompile)
    STL容器的内存分配
    C++中的引用到底是什么
    解决eclipse无法解析shared_ptr
    Deleted pointer causes undefined behaviour
    诞生于饭桌上的jcSQL语言
    状压dp做题笔记
    TC做题笔记
    数据结构做题笔记
    POI做题笔记
  • 原文地址:https://www.cnblogs.com/killmyday/p/2542350.html
Copyright © 2020-2023  润新知