Начиная с Excel (VBA): Запустите внешнюю интерактивную программу, запустите команды и прочитайте их вывод: возможно ли это? - PullRequest
0 голосов
/ 21 января 2019

В настоящее время я делаю следующее для анализа утечки памяти:

  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. Внутри этой внешней программы запустите две другие команды.(Запуск одной команды прост, как объяснено здесь , но как насчет двух?) В случае, если это невозможно: Windbg позволяет объединять команды, используя точку с запятой, чтобы их можно было пропустить.Чтобы выполнить это, я думаю об уловке, объясненной в упомянутом URL.
  3. Подождите, пока все будет закончено.Это можно сделать, используя эту ссылку .
  4. Прочитать вывод.

Моя проблема: возможно ли прочитать вывод?Я знаю, что можно дождаться завершения команды, чтобы убедиться, что результат в порядке или есть ошибка, но я не нахожу способ прочитать фактический результат, выданный командой.

Кто-нибудь знает, возможно ли это (легко) осуществить?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Если вы хотите использовать pykd для полностью автоматических задач, зачем вам запускать его внутри windbg?Вы можете сделать автономный скрипт на Python.

0 голосов
/ 22 января 2019

Я нашел следующее решение моей проблемы:

  • Я адаптирую свой скрипт heap_stat, в конце он создаст пустой (флаговый) файл.
  • Я извожу из Excel VBA следующее:

    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, который будет выполнять анализ.
...