问题标签 [pykd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows-10 - 避免在 heap_stat.py Windbg 转储分析中出现“未知”
我正在使用heap_stat.py
Python 脚本来分析内存转储,以检测内存泄漏,但我遇到了以下问题:“统计”部分通常包含以下类型的“信息”:
经过一番研究,看起来“未知”部分来自转储本身(我的意思是,问题不在于信息存在于转储中并被错误读取,看起来信息不存在于转储中)。
通常转储正在procdump -ma
客户的系统上使用(我的意思是任何解决方案都应该适用于生成的 *.dmp 文件,我无法更改客户的系统)。
有没有办法增加转储中的信息量,使“未知”一词不会出现在内存转储统计信息中?(您可以想象一条“未知”信息使内存泄漏调查变得非常困难:-()
windows - 实时解析 WinDbg 输出并在特定输出行上设置触发器
有没有办法解析输出WinDbg
并在特定的输出行上设置“触发器”?我的意思是 -当出现特定的输出行时执行一行WinDbg
脚本/脚本。pykd
我曾尝试使用WinDbg
脚本执行此操作,但没有成功。
python - 如何避免将 DbgCommand 命令写入日志文件
我有一个烦人的问题Pykd.pyd
:我在脚本中使用它,启动了几个DbgCommand
函数,比如:
这用于获取CMap
对象的大小。由于这是在脚本中完成的,使用了大量的对象,我在Windbg
(菜单edit
,Open/Close Log File
)中使用日志文件,这里有一个问题:
在Windbg
窗口中查看这个时,我只看到DbgCommand
调用的结果,但在日志文件中我也看到了命令本身:
Windbg
窗户:
日志文件:
如何避免DbgCommand
将命令写入日志文件?
同时我发现suppressoutput
存在一个参数,可以用来在屏幕上不显示命令的结果,但这不是我的意思,你可以在下面的摘录中看到:
测试脚本摘录:
屏幕上的结果:
结果在日志文件中:
这似乎suppressoutput
是为了不在DbgCommand
屏幕上显示结果,而我有兴趣不在DbgCommand
日志中显示输入。
让我解释一下typedvar
解决方案有什么问题:
由于某些奇怪的原因,CMap
对象CArray
不能以简单的方式(标准windbg
命令)使用,如您在此处看到的:
如您所见,dt
不适用于此:
这可以通过删除<application_name>
and来处理__ptr64
(不要忘记空格):
这似乎与以下x /2 *!*
结果相对应:
但是,如果我尝试使用typedVar
它似乎不起作用:
这给出了以下结果:
我已经尝试删除<application_name>
和/或__ptr64
但似乎无法解决问题。此外,dt
and "x /2 ! " (格式不正确)的结果清楚地表明所提到的类型存在。typedVar
处理__ptr64
标签似乎有真正的问题。有解决方法吗?
编辑
我刚刚尝试过,使用来自 pykd_team 的 Python 命令,但它似乎仍然不起作用(这次是在CArray
对象上),如您所见:
启动我的脚本会产生以下结果:
试图调查什么是正确的类名:
如您所见,类名是完全匹配的,但还有一个TypeException
. 你知道现在该怎么做吗?(顺便说一句,我正在使用 Visual Studio Professional 2017)
新编辑
该问题很可能是由 PYKD 引起的,无法处理*
类型定义中的星号 ( )。为了避免上述问题,我可以使用任何转义字符吗?
debugging - 如何从转储和符号文件中获取变量名?
我正在调试转储文件,同时我可以访问符号文件。
我正在使用一个脚本,它结合了以下windbg
命令的结果:
(至少,我是这么理解的。如果我错了,请毫不犹豫地纠正我)
脚本的结果(称为heap_stat.py
,可在此 Windbg 扩展列表下找到)是内存地址列表,后跟它们的类型。如果存在内存泄漏,我可以通过统计这些数据得出。
最重要的是,使用提到的内存地址的 WinDbg 命令dt CStringArray m_nSize
(当然,在 a 的特定情况下CStringArray
),我可以看到已使用对象的条目总数CStringArray
,并查看是否存在CStringArray
具有大量条目的对象。
然而,这个系统有一个缺点:
当我发现这样一个CStringArray
有很多条目的对象时,我会卡在那里,因为CStringArray
在我的应用程序中的所有对象中,我不知道我正在处理哪一个。
可能有帮助的一件事是内存地址所在的局部变量的名称,但有一个问题:我不知道此信息是否存在,如果是,我可以在符号文件或转储中找到它,以及(显然)我需要运行哪个命令才能获取此信息(我没有找到一个标志可以dt <flag> <memory address>
返回局部变量名称,由 占用<memory address>
)?
有谁能够帮我?
为澄清起见,这就是我的脚本的结果当前的样子:
如您所见,我可以看到存储变量的内存地址,可以看到类型(从符号文件中检索),并且可以看到条目数量(从dt
Windbg
命令中检索),但我想有如下输出:
或者:
这样的输出将表明我需要验证源代码var3
或obj1.prop2
源代码中发生了什么。
python - 导入错误:DLL 加载失败 找不到指定的程序(XP 上的 WinDBG)
我正在使用一个名为 pykd( https://pykd.codeplex.com/ ) 的包,它是 Windbg 的扩展。我在windows上下载了这个,一切正常。但是,在 Windows XP 上下载时,一切正常。它安装正常,一切似乎都很好。但是,当我运行我的 python 程序时,它会卡住并给出以下错误。
有人可以向我解释这个错误是什么意思吗?为什么这个错误发生在 Windows XP 而不是 Windows 7 中?我正在运行 python 2.7。它给出错误的代码如下:
python - 为什么在 Pykd 中找到符号时会出现“未找到符号”?
我正在尝试使用 PYKD 技术进行调查的转储。
(只有一个反引号)的结果x /2 *!*``vtable'
包含以下结果:
但是,当我尝试获取有关此类的更多信息时,我收到“未找到符号”异常:
Python 源代码:
输出:
该lm
命令的结果返回mfc110u
符号,如您在此处看到的:
供您参考,我现在正在使用 PYKD 的最新版本:
同时,我找到了一种非常简单的方法来重现问题,而无需启动整个脚本(使用 Windbg 提示符):
除了 ussrhero 的回答之外,还有以下额外信息:
结果x /2 *!CPtrList*
包含(以及许多其他)以下结果:
我正在使用的脚本 (heap_stat.py) 浏览结果!heap -h 0
并搜索条目,对应于mfc110u!CPtrList::``vtable'
.
结果dt CPtrList
从以下开始:
我已经想了很久,themfc110u!CPtrList
和entry有什么区别, entry在result<application>!CPtrList
中的确切作用是什么?vtable
x /2
有任何想法吗?
谢谢
c++ - 如何从对象/类中找到第一个字段?
早上好,在这篇文章中,我正在寻找一种CString
在转储中查找条目的方法,但我仍然是 :-)根据 Windbg结果
中提到的第一个字段,似乎可以找到与对象相关的条目。x /2
对于具有虚拟方法的对象,这似乎是__vptr
字段(与*vftable'
条目相对应),我认为这个问题对于CString
类的特定情况很容易。
在源代码 ( C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\<version>\crt\src\vcruntime\undname.cxx
) 中,我发现了以下条目:
这让我想知道我是否可以使用提到的条目之一作为对象的第一个字段的候选者。我已经发现windbg
的x /2 *!ATL::CStringT*
命令中存在一个条目,以 结尾scalar deleting destructor'
,但我不知道是否可以将其用作“第一个字段”候选者。
Ps 如果你想知道“但你为什么不试试呢?”,问题是CStringT
我的转储文件中存在的对象包含一些奇怪的字符,这使得很难看出我是否正在做正确的事情并看到奇怪但正确的字符,或者我正在查看虚假结果。
提前致谢
python - “DbgCommand()”也能得到超链接的结果吗?
在这个问题中,我试图让 Windbg 脚本正常工作,但也许我可以使用 PYKD 解决我的问题。我的问题如下:
我启动命令~* k
,我得到以下响应(如在提到的问题中,我喜欢强调超链接,因此图像而不是简单的文本):
我想在包含CServiceModule::Run
. 当我将鼠标悬停在相应的超链接02
上时,我看到以下 Windbg 命令:
到目前为止,我已经尝试自己重新创建此命令,但现在我意识到,如果我可以从响应本身获取该命令,我的问题就解决了。
据我所知,PYKDDbgCommand()
只给出响应的文本部分(因此,不是超链接下的信息)。
有没有办法从DbgCommand()
命令中获取这个超链接?
object - 使用Windbg仅获取对象的属性值的方法是什么?
我正在使用 PYKD 进行转储调试,因此我正在使用PYKD
dbgCommand()
获取有关对象的信息。
问题是:dbgCommand()
需要解析结果才能使用,如以下示例所示:
我只对大小本身感兴趣0n16
(尽可能限制结果。
有没有办法(使用其他显示选项,使用其他命令dt
,如果需要,使用本机可视化器)来获得以下情况:
与此同时,我已经使用命令更进一步dd
,如您所见:
现在我只需要找到一种不再看到内存地址的方法。
python - 如何在 Python 相关库中转义星号?
我正在使用 PYKD,一个用于为 Windbg 编写 Python 脚本的库。
在处理包含星号的类型名称时,其中一个函数typedVar
似乎不起作用:
(在 Windbg 会话中):
我相信这是由星号引起的,被解释为通配符,所以我想使用转义字符,以便将星号用作“正常”字符,但这似乎不是那么简单:
使用反斜杠:
加倍星号:
有人知道 Python 中正则表达式的转义字符(以防它不是反斜杠或加倍字符)吗?
提前致谢
哦,在我忘记之前:提到的类型存在于应用程序的符号中,如您在此处看到的:
在第一次评论和回复后编辑
这些是我使用的命令(带有r
和u
):
进一步使用最新的 PYKD 库后进行编辑
不幸的是,仍然存在一个问题,您可以从以下摘录中看到:
这里可能是什么问题?我可以做些什么来添加更详细的调试信息吗?
在 ussrhero 提出新建议后进行编辑
typeInfo 似乎为空:
这里另一个与 CMap 相关的 typeInfo 以供参考:
这里是一个不存在的类的 typeInfo(也出于参考原因):
=>所以给出问题的类是已知的,但显然无法处理。
从 ussrhero 上次更新后编辑:
dt
并且dx
似乎提到其他 CMap 一切正常:
dt
并且dx
似乎提到该特定 CMap 存在问题:
但是,符号似乎没有问题:
显然我们在这里处理的是一个 Windbg 问题。我们如何确定这是一个已知的 Windbg 问题还是一个新问题?这些问题在哪里收集?(为了您的信息,我正在使用适用于 Windows 10 的 Windbg 10.0.16299.15 X86,版本 1803(操作系统内部版本 17134.345),但 Windbg Preview 似乎也有这个错误。