如何使用 JDebug 为 bt 堆栈跟踪选项调用 "bt" 命令

How to invoke "bt" command using JDebug for bt stack trace option

我正在使用 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 提示中读回响应。

不确定如何通过 python 或在 shell 脚本发送“bt”命令并读回响应。

我希望将这两个步骤自动化:

Step #1: jdebug filename 
Step #2  bt

[在 gdb 提示符下调用 'bt' 并读回响应行,即 stack_trace 信息] 通过 pyton 或通过 os.system 调用。

您可以使用子进程模块的 Popen 写入标准输入:

from subprocess import Popen, PIPE
proc = Popen(['jdebug', 'core-tarball.0.tgz'], stdin=PIPE)
proc.stdin.write("bt\r")

您可以使用 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)