我使用GDB来调试Python和C的组合程序。当我的程序出现分段错误时,GDB给出了一个错误。
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
这里有几行引用信息。
0 0x00007ffff6f2b6d7 in kill () at ../sysdeps/unix/syscall-template.S:81
1 0x000000000042a241 in posix_kill.64590 (self=<optimized out>, args=<optimized out>) at ../Modules/posixmodule.c:4306
2 0x000000000050e78c in call_function (oparg=<optimized out>, pp_stack=0x7fffffffd7b0) at ../Python/ceval.c:4020
3 PyEval_EvalFrameEx (f=f@entry=Frame 0x7ffff5784608, for file /usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py, line 121, in python_reloader (main_func=<instancemethod at remote 0x7ffff69a3a00>, args=(), kwargs={'use_static_handler': True, 'settings': None, 'pythonpath': None, 'verbosity': '1', 'traceback': None, 'use_ipv6': False, 'use_threading': True, 'use_reloader': True, 'insecure_serving': False}, exit_code=-11),
throwflag=throwflag@entry=0) at ../Python/ceval.c:2666
是GDB还是我的程序的错误?我在跟踪信息中找不到任何我的程序类。
谢谢!
答案 0 :(得分:11)
如果程序将无效参数传递给C库函数,它可能会在C库中崩溃。而且,如果您没有安装C库的源代码,那么您将从gdb获得这样的消息。但是,这并不意味着任何错误......缺少程序使用的一个或多个库的debuginfo和/或源是正常的。通常,解决方案是“向上”几个堆栈帧,看看真正的问题是什么。您很少遇到库错误。