如何在 Windows 10 上调试丢失的 dll

Posted

技术标签:

【中文标题】如何在 Windows 10 上调试丢失的 dll【英文标题】:How to debug missing dlls on Windows 10 【发布时间】:2015-08-24 05:19:13 【问题描述】:

我有一个从 Windows 8.1 升级的 Windows 10 (Windows Universal) 项目。

我尝试在 Windows 10 手机上启动它并得到 ​​p>

System.IO.FileNotFoundException

当它第一次尝试引用我的 Windows 运行时组件时。

System.IO.FileNotFoundException:找不到指定的模块。 (来自 HRESULT 的异常:0x8007007E) 在 System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD) 在 FooRuntimeComponent.STAContextCapture.CaptureContext() 在 FooApp.App..ctor() 在 FooApp.Program.c.b__0_0(ApplicationInitializationCallbackParams p)

异常本身并没有告诉我找不到哪个模块。 这是一级依赖项的列表:

API-MS-WIN-CORE-HANDLE-L1-1-0.DLL
API-MS-WIN-CORE-SYNCH-L1-2-0.DLL
API-MS-WIN-CORE-PROCESSTHREADS-L1-1-2.DLL
API-MS-WIN-CORE-UTIL-L1-1-0.DLL
API-MS-WIN-CORE-ERRORHANDLING-L1-1-1.DLL
API-MS-WIN-CORE-STRING-L1-1-0.DLL
API-MS-WIN-CORE-COM-L1-1-1.DLL
MMDEVAPI.DLL
VCCORLIB140D_APP.DLL
MSVCP140D_APP.DLL
KERNEL32.DLL
OLE32.DLL
CONCRT140D_APP.DLL
VCRUNTIME140D_APP.DLL
UCRTBASED.DLL
WS2_32.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-1.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL

如果我尝试引用和使用空的 Windows 运行时组件,它会起作用。

我尝试从头开始重新创建项目仍然无法正常工作。

似乎手机上缺少一些此类 dll。怎么理解是哪一个? Windows 10 上是否有适用于 VS2015 的 FusLogW?

【问题讨论】:

使用 FieldMedic 应用程序捕获 ETW 数据。使用我的答案 (***.com/a/30289933/1466046) 中的配置文件,并使用 FusionKeyword 关键字 (0x4) (***.com/a/29374658/1466046) 激活 DotnetRuntime Private 提供程序。通过 USB 将手机连接到 PC,在资源管理器中打开文件夹“This PC\Windows Phone\Phone\Documents\FieldMedic\CustomProfiles”并将 WPRP 文件复制到其中。运行应用程序,选择高级“自定义组”下的配置文件。开始记录,运行您的应用程序,停止记录。将 ETL 复制到 PC 并使用 PerfView 或 WPA(通用事件)对其进行分析 如何在手机上激活 DotnetRuntime 私有?我也没有看到来自 Microsoft-Windows-DotNetRuntime 的通用消息。也许这是一个原因。 好的,我试过了,但记录失败。我需要弄清楚是什么失败了。我稍后会测试并报告。 好的,我找到了这个:msdn.microsoft.com/en-us/library/windows/hardware/… 并检查了文件夹 C:\Program Files (x86)\Windows Kits\10\Manifests,但没有 CLR 清单,所以手机没有要捕获的 CLR ETW 事件:( 好的,我使用 fieldMedic 并激活了 Windows Phone 8.1 GDR2 下的 App-Performance 配置文件。当我现在在我的 PC 上使用 PerfView 打开 ETL 时,我看到了 CLR 和 CLR 私有数据。看看这是否包括异常和融合数据。 【参考方案1】:

这可能是因为您对 ole32.dll 的依赖。

我在 Xbox 上遇到了类似的问题。我的假设是,在 UWP 应用程序中,ole lib 中的方法映射到 windows api 集(API-MS-WIN 的东西)而不是 dll 本身。 ole32.dll 可能存在于桌面环境中,但当您在其他平台上运行时,此 dll 可能不存在。

【讨论】:

以上是关于如何在 Windows 10 上调试丢失的 dll的主要内容,如果未能解决你的问题,请参考以下文章

怎么解决dll缺失的问题?

Dev C++调试报错:无法启动此程序,因为计算机中丢失zlib1.dll

Visual Studio 远程调试 - MSVCP140.dll 丢失

Dev C++调试报错:无法启动此程序,因为计算机中丢失zlib1.dll

Dev C++调试报错:无法启动此程序,因为计算机中丢失zlib1.dll

windows phone 如何 编译 libcurl.dll