代码之家  ›  专栏  ›  技术社区  ›  Dominique

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

  •  1
  • Dominique  · 技术社区  · 7 年前

    目前我正在做以下分析内存泄漏:

    1. 我用windbg打开两个垃圾箱。
    2. 我启动heap-stat脚本,这是一个基于python的脚本,用于汇总堆中使用的对象。
    3. 我复制两个heap-stat脚本的结果,并将它们粘贴到Excel工作表中,在其中分析结果。

    我希望从最终的Excel工作表开始,使用vba,实现自动化,如下所示:

    1. 启动外部程序的两个实例( Windbg.exe )打开两个垃圾箱。
    2. 在那些 Windbg 实例,启动必要的命令( .load pykd.pykd 紧随其后 .py heap_stat.py -stat )
    3. 等待 heap_stat.py 脚本完成,并将结果复制到Excel工作表。
    4. 添加一些必要的 Match() 用于完成分析的工作表函数和Excel公式。

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

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

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

    有人知道这是否可行吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   ussrhero    7 年前

    如果你想把pykd用于全自动任务,为什么你需要在windbg中运行它? 您可以制作一个独立的python脚本。

        2
  •  0
  •   Dominique    7 年前

    我找到了以下解决方法:

    • 我将修改我的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文件中,该文件将进行分析。