0

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

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

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

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

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

4

2 回答 2

1

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

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

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

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

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

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

于 2012-02-20T13:47:11.493 回答
1

你应该看到你printf()在终端中输入了 C,这里已经有问题了。你确定你使用的是最新的编译库吗?可以肯定的是,您可以使用 use assert(0)(您需要包含 assert.h)来代替 print。

无论如何,您可以使用 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"
于 2012-02-20T13:48:28.123 回答