从 Excel (VBA) 开始:启动一个外部交互程序,然后在其中启动命令并读取它们的输出:这可能吗?
Starting from Excel (VBA): Launch an external interactive program, and in there launch commands and read their output : is this possible?
目前我正在执行以下操作来分析内存泄漏:
- 我使用 Windbg 打开了两个转储。
- 我启动 heap_stat 脚本,一个基于 Python 的脚本,用于对堆中使用的对象进行汇总。
- 我复制了两个 heap_stat 脚本的结果,并将它们粘贴到 Excel sheet 中,在那里分析结果。
我想自动执行此操作,从最后的 Excel sheet 开始,使用 VBA,如下所示:
- 启动外部程序的两个实例 (
Windbg.exe
) 并用它们打开两个转储。
- 在那些
Windbg
实例中,启动必要的命令(.load pykd.pykd
,然后是 .py heap_stat.py -stat
)。
- 等待
heap_stat.py
脚本完成,并将结果复制到 Excel sheet.
- 添加一些必要的
Match()
工作sheet函数和Excel公式来完成分析。
为了做到这一点,我需要能够:
- 从 VBA 启动一个外部程序。这可以使用
Shell
命令来完成。
- 在该外部程序中,启动另外两个命令。 (启动一个命令很容易,如 here 所述,但是两个呢?)如果这不可能:
Windbg
允许连接命令,使用分号,以便可以跳过。为了执行此操作,我正在考虑在提到的 URL. 中解释的技巧
- 等待一切完成。这可以使用 this link.
来完成
- 读取输出。
我的问题是:是否可以读取输出?我知道可以等待命令完成,以验证结果是否正常或是否有错误,但我找不到读取命令抛出的实际输出的方法。
有人知道这是否(容易)可行吗?
我找到了以下解决问题的方法:
- 我将调整我的 heap_stat 脚本,最后它会创建一个空(标志)文件。
我将从 Excel VBA windbg 如下:
Shell "windbg -z ""C:\Directory\Dumpfile.dmp"" -c "".load pykd.pyd;.logopen C:\Directory\output.txt;!py heap_stat.py -stat""", vbMaximizedFocus
Windbg命令的含义如下:
.load pykd.pyd // load PYKD library
.logopen ... // open a logfile, for all Windbg output (thanks, Zac and Tate, for the idea)
!py heap_stat.py -stat // launch the heap_stat script
- 我将编写一个
while
循环,验证标志文件是否存在。
- 输出文件的内容将被复制到 Excel 文件,该文件将进行分析。
如果要使用 pykd 进行全自动任务,为什么需要 运行 在 windbg 中?
您可以制作一个独立的 python 脚本。
目前我正在执行以下操作来分析内存泄漏:
- 我使用 Windbg 打开了两个转储。
- 我启动 heap_stat 脚本,一个基于 Python 的脚本,用于对堆中使用的对象进行汇总。
- 我复制了两个 heap_stat 脚本的结果,并将它们粘贴到 Excel sheet 中,在那里分析结果。
我想自动执行此操作,从最后的 Excel sheet 开始,使用 VBA,如下所示:
- 启动外部程序的两个实例 (
Windbg.exe
) 并用它们打开两个转储。 - 在那些
Windbg
实例中,启动必要的命令(.load pykd.pykd
,然后是.py heap_stat.py -stat
)。 - 等待
heap_stat.py
脚本完成,并将结果复制到 Excel sheet. - 添加一些必要的
Match()
工作sheet函数和Excel公式来完成分析。
为了做到这一点,我需要能够:
- 从 VBA 启动一个外部程序。这可以使用
Shell
命令来完成。 - 在该外部程序中,启动另外两个命令。 (启动一个命令很容易,如 here 所述,但是两个呢?)如果这不可能:
Windbg
允许连接命令,使用分号,以便可以跳过。为了执行此操作,我正在考虑在提到的 URL. 中解释的技巧
- 等待一切完成。这可以使用 this link. 来完成
- 读取输出。
我的问题是:是否可以读取输出?我知道可以等待命令完成,以验证结果是否正常或是否有错误,但我找不到读取命令抛出的实际输出的方法。
有人知道这是否(容易)可行吗?
我找到了以下解决问题的方法:
- 我将调整我的 heap_stat 脚本,最后它会创建一个空(标志)文件。
我将从 Excel VBA windbg 如下:
Shell "windbg -z ""C:\Directory\Dumpfile.dmp"" -c "".load pykd.pyd;.logopen C:\Directory\output.txt;!py heap_stat.py -stat""", vbMaximizedFocus
Windbg命令的含义如下:
.load pykd.pyd // load PYKD library .logopen ... // open a logfile, for all Windbg output (thanks, Zac and Tate, for the idea) !py heap_stat.py -stat // launch the heap_stat script
- 我将编写一个
while
循环,验证标志文件是否存在。 - 输出文件的内容将被复制到 Excel 文件,该文件将进行分析。
如果要使用 pykd 进行全自动任务,为什么需要 运行 在 windbg 中? 您可以制作一个独立的 python 脚本。