我有一個caller.py,它反覆調用some_c_thing.c創建的例程some_c_thing.so。當我運行它時,它會出現段錯誤 - 是否有一種方法可以檢測哪一行c代碼是殘段?尋找一段由Python腳本調用的C段代碼段錯誤
0
A
回答
1
這可能會實現:
確保本地庫與調試符號編譯(
-g
開關GCC)。運行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函數,然後爲變量值添加更多細粒度日誌記錄等),最後使用調試器來查看使用通常的調試器技術(斷點,步進,監視...)會發生什麼。
0
將Python和.so文件排除在等式之外。看看傳遞了哪些參數(如果有的話),並從調試器中調用能夠跨越C代碼和二進制代碼的例程。
這裏是a link to an article描述了一個簡單的C調試過程,以防您不熟悉調試C(命令行界面)。這是using NetBeans to debug C上的另一個鏈接。此外using Eclipse ...
這可以幫助:gdb: break in shared library loaded by python(也可能變成是一個重複)
-1
段錯誤...檢查變量或類型的變量數量,你傳遞給c函數(在.so中)是正確的。如果不對齊,通常它是段錯誤。
相關問題
- 1. 在Python中調用C++代碼中的段錯誤調用
- 2. 尋找基準代碼片段(C++)
- 3. 調用KSH腳本()導致段錯誤
- 4. 代碼段錯誤
- 5. 尋找這段代碼的正確cinoptions
- 6. 我的C代碼中的段錯誤
- 7. 尋找故意buggy代碼片段
- 8. C代碼的分段錯誤
- 9. 段錯誤SIGSEGV簡單的代碼C
- 10. C代碼中的分段錯誤
- 11. 錯誤的代碼片段
- 12. 在代碼段中找不到錯誤
- 13. 代碼片段中的C++分段錯誤
- 14. 什麼錯誤++這段代碼在C
- 15. Python C API分段錯誤
- 16. Kivy代碼分段錯誤
- 17. 錯誤這段代碼
- 18. 瞭解一段python代碼
- 19. 爲什麼這個C++代碼段分段錯誤?
- 20. jQuery/AJAX代碼片段中的腳本錯誤?
- 21. 使用python-c-api調用的Cython回調段錯誤
- 22. 錯誤點擊一段代碼
- 23. 段錯誤C++
- 24. 無法找到我的代碼中的錯誤....分段錯誤
- 25. 由於fopen()導致的C分段錯誤。如何追蹤和尋找什麼?
- 26. C++方法調用的分段錯誤
- 27. 錯誤:分段錯誤(代碼轉儲)
- 28. 這段代碼爲什麼會給我一個分段錯誤?
- 29. 請幫我找錯誤在我的代碼(分段錯誤)
- 30. 如何在C代碼中找到分段錯誤?
儘管我期望這個問題在當前狀態下可以回答,但如果您爲兩者提供了示例代碼,這將對我們其他人有所幫助,以便更容易地測試我們提出的任何解決方案。 – merlin2011