调试崩溃C项目在Python项目中使用

时间:2012-02-20 13:25:30

标签: python c debugging libusb

在这里完成Python noob(在C中生锈)。

我正在使用带有Lion OS的Mac。尝试使用NFCpy,它使用USBpy,它使用libUSB。 libUSB由于空指针而崩溃但我不知道如何调试它,因为涉及的部分太多了。

现在我正在使用xcode查看突出显示的代码,但我从bash运行所有内容。如果在不同的环境下以某种方式更容易,我可以切换到Windows或Linux。

有关如何调试此内容的任何建议都将非常感谢; - )

PS:如果我能在运行Python脚本的bash中看到我放入C的打印件就好了

2 个答案:

答案 0 :(得分:1)

启用核心转储(ulimit -Sc unlimited)并使程序崩溃以生成核心文件。使用gdb检查核心文件,以了解导致崩溃的更多条件。检查调用堆栈上的函数和局部变量以获取线索。

或者在gdb下运行程序开始并在崩溃后检查实时进程并且gdb拦截信号(SIGSEGV,SIGBUS,等等)。

如果确保所有相关的本机代码(Python,libUSB等)都有可用的调试符号,这两种方法都会更容易。

如Tio建议的那样,将程序中的问题隔离到尽可能小的程序中,也可以使这个过程更容易。

  

PS:如果我能在运行Python脚本的bash中看到我放入C的打印件就好了

你没有提及在你问题的其他地方添加“C”字样的内容。您是否修改了libUSB以添加调试打印?如果是的话,你重建了吗?您采取了哪些步骤来确保使用新版本而不是以前可用的libUSB?您可能需要调整与dylib相关的环境变量,以使动态链接器更喜欢您的版本而不是系统版本。如果你做了别的事情,请解释一下。 :)

答案 1 :(得分:1)

您应该在终端中看到您放入C的printf(),这里已经出现了问题。你确定你使用的是最新编译的库吗?可以肯定的是,您可以使用assert(0)而不是打印(您需要包含assert.h)。

无论如何,您可以使用gdb调试软件:

gdb --args python yourfile.py

# type "run" to start the program
# if you put assert() in your code, gdb will stop at the assert, or you can put 
# manual breakpoint by using "b filename:lineno" before "run"