用法和其它 library 稍微不同, 安裝 python-dbg 後, 是提供另一個含有 debug symbol 的 python 執行檔 python2.7-dbg, 而不是 gdb 自己另外載入 python 的 debug symbol。
可從 dpkg -L python-dbg 的結果得知這事:
$ dpkg -L python2.7-dbg | grep bin/python /usr/lib/debug/usr/bin/python2.7-gdb.py /usr/lib/debug/usr/bin/python2.7 /usr/bin/python2.7-dbg /usr/bin/python2.7-dbg-config /usr/lib/debug/usr/bin/python2.7-dbg-gdb.py $ nm /usr/bin/python2.7 nm: /usr/bin/python2.7: no symbols $ nm /usr/bin/python2.7-dbg | head U ASN1_INTEGER_get@@OPENSSL_1.0.0 U ASN1_STRING_data@@OPENSSL_1.0.0 U ASN1_STRING_length@@OPENSSL_1.0.0 U ASN1_STRING_to_UTF8@@OPENSSL_1.0.0 U ASN1_TIME_print@@OPENSSL_1.0.0 U ASN1_item_d2i@@OPENSSL_1.0.0 00000000008857e0 d AST_type 0000000000967588 b Add_singleton 00000000009675e8 b Add_type 0000000000967560 b And_singleton
實際執行的結果:
$ gdb --args python2.7-dbg -c 'import time; time.sleep(10)' GNU gdb (Ubuntu/Linaro 7.4-2012.02-0ubuntu2) 7.4-2012.02 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> ... Reading symbols from /usr/bin/python2.7-dbg...done. (gdb) r Starting program: /usr/bin/python2.7-dbg -c import\ time\;\ time.sleep\(10\) [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". ^C Program received signal SIGINT, Interrupt. 0x00007ffff69ad003 in __select_nocancel () at ../sysdeps/unix/syscall-template.S:82 82 ../sysdeps/unix/syscall-template.S: No such file or directory. (gdb) bt #0 __select_nocancel at ../sysdeps/unix/syscall-template.S:82 #1 floatsleep at ../Modules/timemodule.c:943 #2 time_sleep at ../Modules/timemodule.c:206 #3 PyCFunction_Call at ../Objects/methodobject.c:81 #4 call_function at ../Python/ceval.c:4021 #5 PyEval_EvalFrameEx at ../Python/ceval.c:2666 #6 PyEval_EvalCodeEx at ../Python/ceval.c:3253 #7 PyEval_EvalCode at ../Python/ceval.c:667 #8 run_mod at ../Python/pythonrun.c:1353 #9 PyRun_StringFlags at ../Python/pythonrun.c:1316 #10 PyRun_SimpleStringFlags at ../Python/pythonrun.c:969 #11 Py_Main at ../Modules/main.c:583 #12 main at ../Modules/python.c:23
順便備忘一下相關的文章: Debugging C/C++ and CPython using GDB 7′s new Python extension support 提到如何在 gdb 內使用 python extension 來 debug python code, 可以從 gdb 內看到 C 函式對回去 python script 的檔名和行數。