【问题标题】:How to debug C++/CLI MFC app that crashes before InitInstance如何调试在 InitInstance 之前崩溃的 C++/CLI MFC 应用程序
【发布时间】:2012-07-08 14:19:06
【问题描述】:

我使用 MFC(主要)和 COM 构建了这个可怕的 C++ 应用程序。它链接到几个库并进行大量科学计算。因此,现在我想为其添加一些新功能,作为一项组织策略,我们正在使用 .NET 开发所有新功能。因此,这个新的 UI 功能将使用 WPF 构建,并将在这个现有的 C++ 应用程序中使用。

我知道如何在 C++ 应用程序中使用 WPF 控件,所以这不是问题。问题是当我尝试在这个项目上打开 CLR 时,在链接阶段需要很长时间(大约 10 分钟)来执行链接并生成混合模式可执行文件。最后,它设法这样做并成功创建了可执行文件。但问题是每当我启动这个可执行文件时,它都会崩溃。我试图调试 InitInstance 但它在此之前的某个地方崩溃了。我有点不知道下一步该尝试什么。

有没有人知道这可能是什么原因。

混合模式程序集的目标框架是 4.0(应该是)所以这里不是问题。

仅供参考,ILDasm 也无法加载此 exe。这需要很多时间,没有错误,但它也不会加载它。这给我的印象是没有正确创建以某种方式管理的图像。

【问题讨论】:

  • 首先在一个小的示例 MFC 应用程序上尝试这个。使用 Debug + Exceptions,Thrown 复选框。
  • 既然您能够编译 C++ 应用程序,那么当您在调试模式下运行时会收到什么样的错误或反馈? IDE也会崩溃吗?项目设置中有一个调试模式选项,可以选择 Native 或 Managed 或两者都调试。尝试每种组合,看看你能得到什么类型的信息。这是什么类型的崩溃?应用程序根本无法启动吗?您是否收到一个指示未处理异常的对话框?如果是这样,该对话框具体说明了什么?

标签: .net-4.0 com mfc c++-cli mixed-mode


【解决方案1】:

不确定这是否有必要,但也没有什么坏处。新的 MFC 项目在 CWinApp 派生类的构造函数中有这个:

#ifdef _MANAGED
    // If the application is built using Common Language Runtime support (/clr):
    //     1) This additional setting is needed for Restart Manager support to work properly.
    //     2) In your project, you must add a reference to System.Windows.Forms in order to build.
    System::Windows::Forms::Application::SetUnhandledExceptionMode(System::Windows::Forms::UnhandledExceptionMode::ThrowException);
#endif

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    相关资源
    最近更新 更多