gpt4 book ai didi

python - 如何使用 python 和 pygdbmi 库暂停 GDB 运行

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:11 24 4
gpt4 key购买 nike

我正在编写 python 脚本来调试在 ARM 芯片上运行的嵌入式软件。

为此,我使用 pygdbmi python 库。这个库允许我配置和启动我的脚本,但有一个功能我找不到:我找不到一种方法来暂停程序的执行。

我想执行我调试的软件一段时间(比如说 1 秒),然后暂停它以检查全局变量值等。为此,我想向 gdb 发送“继续”来运行我的程序程序,然后休眠1秒,最后发送“-exec-interrupt”来挂起程序并向gdb发送新命令。

这是我使用的源代码部分:

gdbmi = GdbController("arm-none-eabi-gdb")
# swPath is the path to my software binary
gdbmi.write('-file-exec-and-symbols %s' % swPath)
# I have to connect to an openOCD server
gdbmi.write('tar rem :3333')
gdbmi.write('monitor reset halt')
gdbmi.write('load')
gdbmi.write('c')
time.sleep(1)
gdbmi.write('-exec-interrupt')

当我执行这个 python 脚本时,出现以下错误:

raise GdbTimeoutError('Did not get response from gdb after %s seconds' % timeout_sec)
pygdbmi.gdbcontroller.GdbTimeoutError: Did not get response from gdb after 1 seconds

所以看来,当调试的软件运行时,我无法向gdb写入新命令。

我该如何暂停我的软件?当我手动使用 GDB 时,我通过发送 Ctrl-C 信号 (SIGINT) 来完成此操作,并且我想从 python 中执行相同的操作。

最佳答案

您好,我是 pygdbmi 的开发者。

你可以做到

import os

# create gdbmi instance

os.kill(gdbmi.gdb_process.pid, 2) # sends signal 2 (SIGINT) to gdb

我想添加一种新方法来执行此操作,例如 send_signal_to_gdb

我在 github 页面上创建了一个问题,并将在下一个版本中添加这些方法:https://github.com/cs01/pygdbmi/issues/26 .

关于python - 如何使用 python 和 pygdbmi 库暂停 GDB 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47139867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com