2012-02-20 27 views
0

完整的Python noob在這裏(和生鏽的C)。調試崩潰在Python項目中使用的C庫

我在Lion OS上使用Mac。嘗試使用使用libpyB的USBpy的NFCpy。 libUSB由於空指針而崩潰,但我不知道如何調試,因爲涉及的零件太多了。

現在我正在使用xcode查看突出顯示的代碼,但是我運行了bash中的所有內容。我可以切換到Windows或Linux,如果這會在不同的環境下更容易一些。

如何調試這任何建議,將不勝感激;-)

PS:這將是蠻好的,如果我能看到我把關於C中bash的版畫,我運行Python腳本

+0

嘗試找出你的'C'代碼,使測試程序可以調試。 – 2012-02-20 13:31:22

回答

1

你應該看到你的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" 
+0

你說得對,沒有使用最新的編譯庫。謝謝 :-) – momo 2012-02-29 04:31:46

1

啓用核心轉儲(ulimit -Sc unlimited)並使程序崩潰以生成核心文件。用gdb檢查覈心文件以瞭解更多關於導致崩潰的條件。檢查調用堆棧上的函數和局部變量以尋找線索。

或者運行gdb下的程序開始並檢查活動進程崩潰後gdb截獲信號(SIGSEGV,SIGBUS,無論)。

如果確保所有相關的本機代碼(Python,libUSB等)都具有可用的調試符號,則這兩種方法都會更容易。

在一個儘可能小的程序中分離問題,就像Tio建議的那樣,也會使這個過程變得更容易。

PS:如果我能看到我把用C在我運行Python腳本bash的版畫這將是蠻好

你沒有提到關於用C添加打印」任何東西「在你的問題的其他地方。你修改libUSB添加調試打印?如果是這樣,你重建它嗎?你採取了哪些步驟來確保你的新版本可以用來代替以前的libUSB?您可能需要調整與dylib相關的環境變量,以使動態鏈接程序更喜歡您的版本超過系統版本。如果你做了別的事情,請解釋一下。 :)