从 Excel (VBA) 开始:启动一个外部交互程序,然后在其中启动命令并读取它们的输出:这可能吗?

Starting from Excel (VBA): Launch an external interactive program, and in there launch commands and read their output : is this possible?

目前我正在执行以下操作来分析内存泄漏:

  1. 我使用 Windbg 打开了两个转储。
  2. 我启动 heap_stat 脚本,一个基于 Python 的脚本,用于对堆中使用的对象进行汇总。
  3. 我复制了两个 heap_stat 脚本的结果,并将它们粘贴到 Excel sheet 中,在那里分析结果。

我想自动执行此操作,从最后的 Excel sheet 开始,使用 VBA,如下所示:

  1. 启动外部程序的两个实例 (Windbg.exe) 并用它们打开两个转储。
  2. 在那些 Windbg 实例中,启动必要的命令(.load pykd.pykd,然后是 .py heap_stat.py -stat)。
  3. 等待 heap_stat.py 脚本完成,并将结果复制到 Excel sheet.
  4. 添加一些必要的Match()工作sheet函数和Excel公式来完成分析。

为了做到这一点,我需要能够:

  1. 从 VBA 启动一个外部程序。这可以使用 Shell 命令来完成。
  2. 在该外部程序中,启动另外两个命令。 (启动一个命令很容易,如 here 所述,但是两个呢?)如果这不可能:Windbg 允许连接命令,使用分号,以便可以跳过。为了执行此操作,我正在考虑在提到的 URL.
  3. 中解释的技巧
  4. 等待一切完成。这可以使用 this link.
  5. 来完成
  6. 读取输出。

我的问题是:是否可以读取输出?我知道可以等待命令完成,以验证结果是否正常或是否有错误,但我找不到读取命令抛出的实际输出的方法。

有人知道这是否(容易)可行吗?

我找到了以下解决问题的方法:

  • 我将调整我的 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 脚本。