例如,可结合py-bt显示的帧编号和frame命令切换到特定帧;info threads命令列出进程内的线程列表,thread命令选择不同线程,thread apply all COMMAND(或ta a COMMAND)可在所有线程上运行指定命令,配合py-bt能在 Python 层级查看每个线程的执行情况,全面掌握程序运行状态。 六、如何使用GDB调试CPython扩展与内部代码的实际...
例如,可结合py-bt显示的帧编号和frame命令切换到特定帧;info threads命令列出进程内的线程列表,thread命令选择不同线程,thread apply all COMMAND(或ta a COMMAND)可在所有线程上运行指定命令,配合py-bt能在 Python 层级查看每个线程的执行情况,全面掌握程序运行状态。 六、如何使用GDB调试CPython扩展与内部代码的实际...
上节中,py-bt可以帮上忙——至少知道线程的执行堆栈。还有一个操作py-list,可以清楚看到当前执行到代码的第几行,还有前后若干行的代码可以对照哦: (gdb) py-list 2025 # Open external files with our Mac app 2026 if sys.platform == "darwin" and 'Spyder.app' in __file__: 2027 main.connect(app...
(gdb) py-bt 1. 可以获取熟悉的 Python 源代码。 对挂住的进程开刀 如果一个进程看上去挂住了,他可能在等待什么东西(比如锁、IO 等等)。 也有可能在拼命的跑循环。连接上这个进程,然后检查调用栈也许可以帮上忙。 如果进程在疯狂循环,你可以先让它运行一会,使用 cont 命令, 然后使用 Ctrl+C 来暂停,并且打印...
add-auto-load-safe-path /path/to/dir/with/python-gdb.py 到~/.gdbinit。我用了它的测试 gdb --args /path/to/python3.5/binary (gdb) py-bt 但我得到了 Undefined command: "py-bt" gdb 版本7.2并启用了Python支持。看答案 找到了!你必须添加 /PATH_TO_PYTHON_SRC/Tools/gdb 到PYTHONPATH,然后在...
(gdb) so ~/move.py (gdb) mv 1 binary_search.cpp:18 在“gdb自动化一的技术”一文中,我们最后把自定义命令的实现放到~/.gdbinit里面。这样gdb每次启动时就会运行它,而无需手动source。直接把python代码放进~/.gdbinit当然是不行的。需要变通一下,在~/.gdbinit加入source ~/move.py。这样gdb每次启动时都会...
source /usr/share/gdb/python3/libpython.py 加载后,你可以使用以下命令来查看 Python 异常信息: py-bt # 显示 Python 回溯信息 py-list # 显示当前的 Python 代码行 py-up # 向上移动 Python 堆栈帧 py-down # 向下移动 Python 堆栈帧 6. 退出 gdb 调试完成后,你可以使用以下命令退出 gdb: quit 7.样...
(gdb) py-bt 可以获取熟悉的 Python 源代码。 对挂住的进程开刀 如果一个进程看上去挂住了,他可能在等待什么东西(比如锁、IO 等等)。 也有可能在拼命的跑循环。连接上这个进程,然后检查调用栈也许可以帮上忙。 如果进程在疯狂循环,你可以先让它运行一会,使用 cont 命令, 然后使用 Ctrl+C 来暂停,并且打印出调...
(gdb) break hello.py:6 if i == 5 ``` 六、调试命令 一旦程序执行到断点处,就可以使用GDB提供的各种调试命令来检查程序状态。 - `backtrace` 或者 `bt`:显示当前的函数调用堆栈。 ``` (gdb) bt ``` - `frame` 或者 `f`:切换到指定的堆栈帧。
(gdb) py-bt #4 Frame 0xb7c21034, for file /usr/lib/python2.7/subprocess.py, line 1363, in _internal_poll (self=, _deadstate=2147483647, _waitpid=, _WNOHANG=1, _os_error=, _ECHILD=10) pid, sts = _waitpid(self.pid, _WNOHANG) #8 Frame 0xb7c6549c, for file /usr/lib/python2....