Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python项目中使用的调试崩溃C库_Python_C_Debugging_Libusb - Fatal编程技术网

Python项目中使用的调试崩溃C库

Python项目中使用的调试崩溃C库,python,c,debugging,libusb,Python,C,Debugging,Libusb,在这里完成Python noob(C中为rusty) 我使用的是一款带有Lion操作系统的Mac电脑。尝试使用NFCpy,它使用USBpy,它使用libUSB。libUSB由于一个空指针而崩溃,但我不知道如何调试它,因为它涉及到很多部分 现在我正在使用xcode查看突出显示的代码,但是我从bash运行了所有东西。我可以切换到Windows或Linux,如果这在不同的环境下更容易实现的话 任何关于如何调试的建议都将不胜感激;-) PS:如果我能在bash中看到我放在C中的打印,在那里我运行Pyth

在这里完成Python noob(C中为rusty)

我使用的是一款带有Lion操作系统的Mac电脑。尝试使用NFCpy,它使用USBpy,它使用libUSB。libUSB由于一个空指针而崩溃,但我不知道如何调试它,因为它涉及到很多部分

现在我正在使用xcode查看突出显示的代码,但是我从bash运行了所有东西。我可以切换到Windows或Linux,如果这在不同的环境下更容易实现的话

任何关于如何调试的建议都将不胜感激;-)

PS:如果我能在bash中看到我放在C中的打印,在那里我运行Python脚本

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

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

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

正如Tio所建议的,将问题隔离在一个尽可能小的程序中,也会使这个过程更容易

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


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

您应该看到您的
printf()
您在终端中输入了C,这里已经有问题了。您确定正在使用最新编译的库吗?当然,您可以使用
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"

试着隔离你的
c
代码,制作一个可以调试的测试程序。你是对的,没有使用最新编译的库。谢谢:-)