使用GDB进行Python内存调试

Mat*_*een 4 python linux debugging openssl

我们有一个Linux应用程序,它使用OpenSSL的Python绑定,我怀疑它会导致随机崩溃.偶尔,我们会看到它崩溃的消息:

Python致命错误:已跟踪GC对象

这似乎是库的编程错误,或内存损坏的症状.在给定核心文件的情况下,有没有办法知道它执行的最后一行Python源代码?或者如果它附加在GDB中?我意识到它可能都是编译后的字节码,但我希望有人可能已经解决了这个问题.目前它正在运行跟踪模块激活,我们希望它会再次发生,但可能需要很长时间.

Ale*_*try 5

是的,你可以做这样的事情:

(gdb) print PyRun_SimpleString("import traceback; traceback.print_stack()")
  File "<string>", line 1, in <module>
  File "/var/tmp/foo.py", line 2, in <module>
    i**2
  File "<string>", line 1, in <module>
$1 = 0
Run Code Online (Sandbox Code Playgroud)

也应该可以使用pystackpython gdbinit文件中定义的命令,但它对我不起作用.如果你想研究它,这里讨论它.

此外,如果您怀疑内存问题valgrind,如果您准备重新编译它,值得注意的是您可以使用python.这里描述该过程.