我们有一个使用OpenSSL的Python绑定的Linux应用程序,我怀疑它会导致随机崩溃。有时,我们会看到它崩溃并显示以下消息:
Python致命错误:GC对象已被跟踪
这似乎是库方面的编程错误,或者是内存损坏的症状。给定一个核心文件,有什么办法知道它执行的最后一行Python源代码?还是如果它附加在GDB中?我意识到这可能是所有已编译的字节码,但是我希望那里有人解决了这个问题。当前,它正在运行,并且跟踪模块处于活动状态,我们希望它会再次发生,但是可能要花很长时间。
是的,您可以执行以下操作:
(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
也应该可以使用pystackpython gdbinit文件中定义的命令,但是它对我不起作用。如果您想对此进行讨论,请在此处进行讨论。
pystack
另外,如果您怀疑内存问题,值得注意的是valgrind,如果您准备重新编译它,则可以将其与python一起使用。此处描述该过程。
valgrind