我们有一个应用程序,它是一个 C/C++/MFC 桌面应用程序,带有一些 C++/CLI 程序集,允许我们访问一些托管代码功能。该应用程序在 Release模式下启动时崩溃,仅显示消息
未知模块中发生类型为“System.TypeInitializationException”的未处理异常。 附加信息:'' 的类型初始值设定项引发异常。
我该如何着手调试这种情况以及混合托管/非托管代码的问题是什么?我必须采取哪些特殊步骤才能使它们正常播放?
最佳答案
值得怀疑的是:
缺少非托管 DLL。您可以使用 Depends(来自 Sysinternals)并开始分析,但我一直难以在混合模式下获得良好的结果。
制作一个具有相同依赖关系的 native 最小测试工具,并通过 Depends 运行它 - 您将获得有关丢失的 DLL 的明确信息。
您是否在您的发布构建产品中使用混淆? 我们使用的混淆软件在评估模式中为类型添加了一个字段。我们有固定的偏移量结构,但新字段没有获得显式偏移量。这是一个错误,如果它在我们自己的代码中,它会在编译时被标记出来。由于混淆器正在动态修补程序集,CLR 别无选择,只能在运行时加载无效类型。
关于c++ - 调试混合代码应用程序中的启动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8809209/