【问题标题】:Unable to debug Win 8 app using Mixed (Managed and Native) debugger无法使用混合(托管和本机)调试器调试 Win 8 应用程序
【发布时间】:2013-09-27 06:52:52
【问题描述】:

WinRT 应用中,当将 调试器类型切换为混合(从托管)时,应用程序无法启动。暂停调试器显示执行在:

static void Main(string[] args)
 {
     global::Windows.UI.Xaml.Application.Start((p) => new App());
 }

输出窗口不断将 EETypeLoadExceptions 显示为不同的内存位置:

ApplicationName.exe 中 0x757E4B32 处的第一次机会异常:Microsoft C++ 异常:内存位置 0x0BF7D134 处的 EETypeLoadException。

看起来CLR异常是:

CLR:(C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll) Rejecting native image because native image dependency C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll had a different identity than expected

我需要为 SOS 调试扩展 (SOS.dll)

使用本机调试器

当创建一个新的空白应用程序,然后添加与我的应用程序相同的依赖项时,我没有遇到此问题,因此这是我的应用程序特有的问题。

关于问题是什么或如何进一步排除故障的任何想法?任何有在 WinRT 应用中使用 SOS 调试扩展 (SOS.dll) 经验的人?

【问题讨论】:

  • 查看托管异常来调试这一点很重要,本机异常没有帮助。 Debug + Exceptions,勾选 CLR exceptions 的 Throw 复选框。
  • 看起来像是来自 Ninject:A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll Additional information: Could not load file or assembly 'Ninject.Extensions.*.dll' or one of its dependencies. The system cannot find the file specified.
  • 另一种诊断模块加载问题的有用方法是使用 sysinternals 进程监视器来监视您的应用程序启动。您可以查找有问题的 DLL,并查看应用程序在尝试加载它时探测的所有位置,然后找出所需的 DLL 不在这些位置之一的原因。

标签: windows-8 windows-runtime winrt-xaml sos


【解决方案1】:

我有一个托管应用程序调用本机 COM 对象,这些对象反过来又回调一些托管 COM 实例。在某个时候,当本机 COM 回调托管 COM 对象时,EETypeLoadException 被抛出。

原来我在不同的项目中有几个程序集同名(Common.dll)。由于所有程序集都是未签名的,.NET 运行时无法加载两个具有相同名称的不同程序集并通过 EETypeLoadException 报告问题。

我希望诊断更详细,但至少在我的情况下它现在已经解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2018-12-29
    • 2015-01-03
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多