WinDbg无法加载扩展

约翰164

我无法在WinDbg预览中加载扩展程序。扩展代码可以在这里找到

目前,当我运行时,.extpath我会获得默认路径,并且会保存扩展名,C:\Users\user\AppData\Local\Dbg\EngineExtensions32但是每当我执行.chain时,dll永远不会加载扩展名,尝试手动加载扩展名会导致错误The engine has been disconnected unexpectedly

错误信息

如何获得此扩展程序才能正确加载?

作为一个侧面说明这对许多应用程序时,我重视他们的WinDbg,并尝试加载sos.dll我只是得到下面的输出并没有什么我已经在网上找到,如已经能够进行整治:
.cordll -u -ve -l CLRDLL: No CLR image loaded (i.e. mscorwks.dll) CLR DLL status: No load attempts

如何在每次WinDbg启动时自动加载CLR SOS dll?

托马斯·韦勒

您正在寻求2个问题的帮助,因此有两个答案。在此站点上,我们一次更喜欢一个问题。

如何获得此扩展程序才能正确加载?

您提供链接中有一条注释:

尽管我相信我已解决了该问题,但可能需要将扩展​​名复制到WinDBG所在的同一文件夹中。

我可以重现您的问题,当我将所有编译工件复制到WinDbg目录中时,它的确已修复。

为此,在Github存储库中打开了一个问题

如何在每次WinDbg启动时自动加载CLR SOS dll?

加载SOS并非易事,原因如下:

  • WinDbg启动时无法加载SOS。它还需要调试会话,因此它要么需要连接到正在运行的程序,要么需要打开故障转储,或者需要启动新进程。这意味着,您要么需要-z加载故障转储,-p附加py PID,-pn按进程名称附加或提供可执行文件的名称。
  • 无法在初始断点处加载SOS,因为.NET尚不可用,并且尚不清楚要加载哪个版本的SOS。
  • 您需要以正确的位数运行WinDbg才能加载SOS,否则它将因位数不匹配而失败(类似于.NET中的BadImageFormatException)。
  • 依赖于.NET版本,我们需要加载SOS地方clrcoreclr或者mscorwks是。更糟糕的是,在某些情况下,.NET DLL甚至没有正确命名(例如mscorwks_64800000
  • 使用引号时,我们可能需要正确转义这些引号

有了这些知识,您现在可以构建一个小脚本并将其与-c参数一起传递给WinDbg 但是首先让我们确定需要做什么。

首先,我们可以简单地尝试所有.NET版本。如果加载了.NET,其中两个将失败,其中一个可能成功。这三个命令是

.loadby sos clr
.loadby sos coreclr
.loadby sos mscorwks

现在,我们需要在加载.NET时执行此操作。这对于崩溃转储或已经运行.NET的进程很好。这不适用于从头开始的过程。

因此,对于简单的情况,我们有一个命令行

windbg.exe -c ".loadby sos clr;.loadby sos coreclr;.loadby sos mscorwks" -z crash.dmp
windbg.exe -c ".loadby sos clr;.loadby sos coreclr;.loadby sos mscorwks" -p PID
windbg.exe -c ".loadby sos clr;.loadby sos coreclr;.loadby sos mscorwks" -pn name

启动新流程会变得更加复杂。通常,您可以像

sxe -c".loadby sos clr;g" ld clr

在加载CLR DLL之前就加载SOS。不幸的是,一次只能有一个ld断点,并且只能指定一个模块。但是,我们可以通过设置三个未解决的断点来解决此问题:

bu clr!EEStartup ".loadby sos clr;g"
bu mscorwks!EEStartup ".loadby sos mscorwks;g"
bu coreclr!EEStartup ".loadby sos coreclr;g"

请注意,我们在这里用引号引起了丑陋的转义问题。无法使用双引号(""),脱字符号(^")或我们从命令行知道的其他内容来解决这些问题这就是为什么我们需要编写脚本。命令行是

windbg -c "$$<loadsos.dbg;g" notepad.exe

其中$$<是使用给定名称运行脚本的命令。然后,该文件包含所需的命令

.loadby sos clr
.loadby sos coreclr
.loadby sos mscorwks
bu clr!EEStartup ".loadby sos clr;g"
bu mscorwks!EEStartup ".loadby sos mscorwks;g"
bu coreclr!EEStartup ".loadby sos coreclr;g"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章