Как вызвать команду "bt" с помощью JDebug для параметра трассировки стека bt - PullRequest
3 голосов
/ 04 августа 2020

Я использую системный вызов Jdebug, используя python и пытаюсь автоматизировать процесс команды «bt», как показано ниже.

Он состоит из двух шагов.

jdebug core-tarball.0.tgz

Ответ получено:

Using '/tmp' as temporary  location
jdebug version: 5.0.0
[File is compressed. This may take a moment...]
....
[Current thread is 1 (LWP 100276)]

(gdb) 

Как видно выше, появляется приглашение (gdb), и теперь мне нужно передать команду «bt» и прочитать ответ из приглашения gdb.

Не знаю, как отправьте команду «bt» через python или в сценарий оболочки и прочтите ответ.

Я хочу автоматизировать эти два шага:

Step #1: jdebug filename 
Step #2  bt

[вызвать 'bt' на gdb запросить и прочитать строки ответа, т.е. информацию о stack_trace] через pyton или через вызов os.system.

Ответы [ 2 ]

2 голосов
/ 09 августа 2020

Вы можете писать на стандартный ввод, используя Popen модуля подпроцесса:

from subprocess import Popen, PIPE
proc = Popen(['jdebug', 'core-tarball.0.tgz'], stdin=PIPE)
proc.stdin.write("bt\r")
1 голос
/ 13 августа 2020

Для этого вы можете использовать Popen.communicate () .

import subprocess
p = subprocess.Popen(["jdebug", "core-tarball.0.tgz"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdout_data, stderr_data = p.communicate("bt")
print(stdout_data)
print(p.returncode)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...