繁体   English   中英

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

[英]Debugging startup issues in mixed code applications

我们有一个应用程序,它是C / C ++ / MFC桌面应用程序,带有一些C ++ / CLI程序集,使我们可以访问某些托管代码功能。 该应用在发布模式下启动时仅显示以下消息而崩溃

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

我该如何调试这种情况,以及混合托管/非托管代码有什么问题? 我必须采取哪些特殊步骤才能使它们发挥出色?

值得怀疑的是:

缺少非托管DLL。 您可以使用Depends(来自Sysinternals)并开始进行性能分析,但是我一直努力在混合模式下获得良好的结果。

制作具有相同依赖项的本机最小测试工具,并通过Depends运行它-您将获得有关缺少DLL的确定信息。

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

在我看来(基于我遇到的一些麻烦),马特·史密斯(Matt Smith)的评论是最有用的答案。 实际上,检查“引发”以了解所有类型的异常。 问题经常是全局对象的构造函数崩溃。 另请参阅答案5

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

其中说(除其他外):

单击“调试”->“异常”,然后选中所有“抛出”复选框。 这将导致调试器停止所有首次机会异常,并帮助您在看到的Type Initializer错误下查找错误。 如果它与另一个程序集(与我的程序集)相关,则可以使用Microsoft的程序集绑定日志查看器工具来帮助确定问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM