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

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

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

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

我该如何着手调试这种情况以及混合托管/非托管代码的问题是什么?我必须采取哪些特殊步骤才能使它们正常播放?

最佳答案

值得怀疑的是:

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

制作一个具有相同依赖关系的 native 最小测试工具,并通过 Depends 运行它 - 您将获得有关丢失的 DLL 的明确信息。

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

关于c++ - 调试混合代码应用程序中的启动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8809209/

相关文章:

c++ - 为什么投长可以解决 "warning: cast to pointer from integer of different size"?

c++ - QThreadPool 用于同时运行大量计算

visual-c++ - 如何在 C++ CLI 中获取枚举项的名称?

c++ - 根据用户输入定义缓存大小

c# - 从 C++ 编码到 C# 时 CLR 崩溃

c++ - 重用编译器前端的结果来加速多种配置/平台的 C++ 代码编译

c++ - 英特尔编译器无法编译具有多个参数的可变 lambda 捕获

c++-cli - 将 C++/CLI 中的 int 数组返回到 c# .NET

c++ - 对于托管和非托管 C++ 的混合,最好的单元测试工具是什么?

c# - 将非托管 C++ 类库公开给 C#