我无法在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存储库中打开了一个问题。
加载SOS并非易事,原因如下:
-z
加载故障转储,-p
附加py PID,-pn
按进程名称附加或提供可执行文件的名称。clr
,coreclr
或者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] 删除。
我来说两句