调试混合代码应用程序中的启动问题

时间:2012-01-10 19:20:52

标签: c++ c++-cli unmanaged startup managed

我们有一个应用程序是一个C / C ++ / MFC桌面应用程序,有一些C ++ / CLI程序集允许我们访问一些托管代码功能。应用程序仅在启动时以发布模式崩溃

未处理的类型' System.TypeInitializationException'发生在未知模块中。 附加信息:''的类型初始值设定项抛出异常。

如何调试此方案以及混合托管/非托管代码有哪些问题?我必须采取哪些特殊步骤才能使它们发挥得很好?

2 个答案:

答案 0 :(得分:0)

值得怀疑的是:

缺少非托管DLL。您可以使用Depends(来自Sysinternals)并开始分析,但我很难在混合模式下获得良好的结果。

创建具有相同依赖关系的本机最小测试工具,并通过Depends运行 - 您将获得有关丢失的DLL的确切信息。

您是否在发布版本产品中使用了混淆? 我们使用的混淆软件在评估模式中为类型添加了一个字段。我们有固定的偏移结构,但新字段没有明确的偏移量。这是一个错误,如果它在我们自己的代码中,它将在编译时标记出来。由于混淆器是动态修补程序集,因此CLR没有选项,但无法在运行时加载无效类型。

答案 1 :(得分:0)

在我看来(基于我遇到的一些麻烦)Matt Smith的评论是最有用的答案;实际上,检查所有类型的异常'Thrown'。通常问题是全局对象的构造函数崩溃。另见答案5

http://www.codeproject.com/Questions/67419/The-type-initializer-for-threw-an-exception

说(除其他外):

  

点击调试 - >例外并检查所有Thrown复选框。这个   将导致调试器停止所有第一次机会异常和   将帮助您找到Type Initializer错误下的错误   你看到了。如果它与另一个组件相关,就像我的那样,你   可以使用Microsoft的Assembly Binding Log Viewer工具来帮助确定   问题。