问题标签 [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.
python - 如何使用 PYKD 读取堆
在这个问题中,我想用DbgCommand("dt ...")
API 调用替换,PYKD
命令typedVar()
来救援。
结果,我的 heap_stat 脚本(以m_nSize
和m_nCount
信息扩展)现在运行速度快了三倍。
供您参考,我已完成此替换以计算 STL 集合中的成员数量:
由于这次成功,我想DbgCommand
通过 API 调用替换其他请求。
对于 的情况dbgCommand('!heap -h 0')
,这似乎不是那么简单(一些例子):
如何迭代我的进程堆(替换!heap -h 0
)?
PS 即使targetHeap()
不能代替!heap -h 0
,我还是想知道如何使用它,用于调查目的。
directory - 如何获取在 Windbg 中打开的转储文件的路径?
我正在打开转储文件Windbg
,并且正在编写一个PYKD
相关的 Python 脚本来处理该转储文件。现在我想在该转储文件的目录中创建一个文件,该文件的名称应该基于我刚刚打开的转储文件。
为了做到这一点,我只需要知道我打开的转储文件的路径,但我没有找到基本Windbg
命令,也没有PYKD
得到它的命令。
如何获取在 Windbg 中打开的文件的路径?
python - 提高 PYKD heap_stat 性能,禁用 RtlValidSecurityDescriptor
在使用heap_stat(一个基于 PYKD 库的 Python 脚本,用于在 Windbg 环境中运行 Python 脚本)时,我对这个脚本完成其工作所需的大量时间感到沮丧。
所以,我已经开始了一个分析会话,使用“非常困”,这给出了以下结果:
如您所见,大部分时间都花在一个函数上,检查一些有效性(我认为不需要)。有没有办法禁用此检查(Windows 配置、注册表设置……)?
在第一次评论后编辑
由于xperf
请求分析,我执行了以下xperf
命令:
开始分析:
停止分析:
我已经使用 . 打开了结果(不完整,因为我首先想看看结果是什么样子)Windows Performance Analyzer
,但这对我来说毫无意义。我相信我的xperf
配置很糟糕。xperf
为了能够测量哪个功能需要多少时间,我需要如何启动分析?
windbg - 如何摆脱符号文件相关的警告/错误消息
我正在使用 调试转储文件,Windbg
并且经常收到警告/错误消息,如下所示:
为了避免这些,我已经尝试通过以下方式进行整个处理:
但是警告/错误消息不断出现。
第一次回复后编辑(在第二次编辑中确认)
我已经做了几次尝试,使用.outmask-6
and .outmask-206
,但都或多或少地失败了。这意味着什么:
我相信有些命令会禁用.outmask
命令。你能确认一下吗,如果是的话,是否有类似的命令:
就symsrv.ini
文件而言:我的计算机上没有此文件,老实说,我不想搜索符号加载可能导致问题的每个模块。我宁愿只是避免提到的警告/错误消息。
在对该问题有更多了解后进行编辑
我还没有提到的一件事是PYKD
用法:我正在研究 heap_stat,一个基于 PYKD 的脚本,用于执行内存分析,我相信这里的问题,正如您在以下摘录中看到的那样:
脚本源代码:
脚本输出:
在我看来,这意味着PYKD
typeInfo()
对象声明是唯一的,禁用.outmask()
Windbg
命令。
@PYKD 开发人员:您能确认一下吗?如果可以,请为此添加一个PYKD
问题?(我在问题主页上没有看到任何.outmask
相关问题)PYKD
c++ - 如何识别“错误”指针
我正在使用基于 PYKD 库的脚本 heap_stat(该脚本Ptrptr()
对!heap -h 0
结果执行并从那里继续)。
这个 heap_stat 脚本有时包含错误的结果,你可以从下面的摘录中看到:
heap_stat 源代码:
结果摘录:
在 Visual Studio 中验证这一点会产生以下结果:
=> 正确
=> 错误:这似乎是一个不再有效的对象的剩余物。
我的问题:PYKD 中是否有任何功能可以过滤掉那些错误的对象?在 Visual Studio 中调试时,甚至有办法识别它们吗?不要忘记:那些剩菜是什么?我认为我的源代码中没有太多 CStringArray 的delete array_with_strings
位置。array_with_strings
python - try..except 在交互式 Windbg Python 会话中让我退出 Python 会话
我正在使用 PYKD 进行转储分析。PYKD 库用于 heap_stat 脚本,我想以更具交互性的方式使用 PYKD 库,如下所示:
这很好用(我知道这没用,我只是想证明它有效)。
但是,heap_stat 脚本包含以下源代码:
当我以交互方式尝试时,这似乎不起作用:
这会产生以下错误,让我退出 Python 会话:
没关系:将这个函数调用包装在子句中是有原因的try..except
,所以现在让我们尝试将这个函数包装try..except
在交互式 Python 会话中的子句中:
=> 这给出了同样的错误,尽管try..except
. 这很可能是由于缩进错误,但另一方面,交互式 Windbg Python 会话不允许多行,所以我不能使用 Python 缩进。
有没有办法try..except
在 Windbg PYKD Python 会话中使用子句?
提前致谢
Ps 为了您的理解:这种行为(被踢出交互式会话)似乎是 Windbg PYKD 的典型行为,您可以在以下命令提示符 Python 会话中看到:
如您所见,抛出了异常,但我没有被踢出 Python 会话(观看>>>
提示)。
python-2.7 - pykd:带有回调的 setBp 给出类型错误
我正在尝试使用 windbg 和 pykd 编写堆跟踪器,但是在尝试设置回调时出现 TypeError。
这是代码的一部分:
当我尝试运行它时,我收到以下错误:
我正在使用python 2.7版;
和 pykd 版本 2.0.0.22
我最初尝试遵循以下教程,但遇到了类似的错误,https://labs.f-secure.com/archive/heap-tracing-with-windbg-and-python/
任何帮助,将不胜感激。
问候,
python - 将地址转换为 PyKD 可以使用/等效于 WinDbg 的数字?命令
在 WinDbg 中,我有几个选项来定义一个数字
我正在寻找 PyKD 等价物来使用所有这些可能性作为我的脚本的输入。
那就是:我得到一个字符串,sys.argv[1]
它可以是上述任何一种格式,我需要将它转换成 PyKD 可以理解的地址。
我试过了:
python - pykd 出现问题(pykd.DbgException:调用 IDebugClient::GetOutputCallbacks 失败 HRESULT 0x80010107)
我正在使用 pykd 并且能够将它与我的调试器 (windbg) 连接,但由于某种原因,我无法处理任何命令,pykd.dbgCommand
不确定问题是什么,因为我尝试了多种方法来尝试解决问题:
- 重新安装pydk + python
- 在 python2.7、python3.5、python3.8 上试过
- 尝试了不同的系统+不同的调试会话
当我尝试在windbg会话上运行命令时,它能够产生结果,但不知何故,它现在能够从python控制台做到这一点。
任何帮助,将不胜感激。
感谢大家提前回答。
windbg - 使用 PyKd 从故障转储文件中获取进程 ID
我正在使用 Pykd 分析很多故障转储,我想从故障转储中获取进程 ID (PID)。
在 WinDbg 中,我会使用命令|
并用我的大脑来解决它。一段时间后,我会想出一个命令
它为我提取进程 ID。
稍微聪明一点,我会改用伪寄存器:
如何使用 PyKD 从用户模式故障转储文件 (.dmp) 中获取进程 ID?
当然我总是可以做一个pykd.dbgCommand()
,但我想使用更强大的内置方式。
我试过了
pykd.getCurrentProcessId()
但它返回 0。pykd.reg("tpid")
但它说“无效的注册名称”