2014-06-29 35 views
0

我有一個caller.py,它反覆調用some_c_thing.c創建的例程some_c_thing.so。當我運行它時,它會出現段錯誤 - 是否有一種方法可以檢測哪一行c代碼是殘段?尋找一段由Python腳本調用的C段代碼段錯誤

+1

儘管我期望這個問題在當前狀態下可以回答,但如果您爲兩者提供了示例代碼,這將對我們其他人有所幫助,以便更容易地測試我們提出的任何解決方案。 – merlin2011

回答

1

這可能會實現:

  1. 確保本地庫與調試符號編譯(-g開關GCC)。

  2. 運行Python下GDB並讓它崩潰:

    gdb --args python caller.py 
    run # tell gdb to run the program 
    # script runs and crashes 
    bt # print backtrace, which should show the crashing line 
    

如果崩潰的本地庫代碼情況發生,那麼這應該揭示線。

如果本地庫代碼只是破壞某些東西或違反了某些後置條件,並且崩潰發生在Python解釋器的代碼中,那麼這將不會有幫助。在這種情況下,您的選擇是代碼審查,添加調試打印(第一步是隻記錄每個C函數的入口和出口,以檢測崩潰之前調用的最後一個C函數,然後爲變量值添加更多細粒度日誌記錄等),最後使用調試器來查看使用通常的調試器技術(斷點,步進,監視...)會發生什麼。

-1

段錯誤...檢查變量或類型的變量數量,你傳遞給c函數(在.so中)是正確的。如果不對齊,通常它是段錯誤。