我必須運行一些用Python編寫的單元測試。我們有用C++測試的代碼,所以我將它編譯到一個共享對象中,並使用swig爲python腳本提供一個接口來調用必要的api來測試。現在,當我運行其中一個python腳本(顯然是訪問我打算測試的C++代碼庫)時,我得到一個「glibc free free():invalid pointer」。現在我明白,有一些內存問題,無論是免費還是釋放一個無法訪問的內存。現在我要求你的專家:glibc detected *** free():無效指針:Python C++和Swig
1]我沒有得到任何回溯(甚至沒有行號),有無論如何知道問題發生在哪裏?我沒有得到比腳本在某個時刻突然停止並打印這樣的事情
*** glibc的其他任何信息檢測到*免費():無效的指針:0x099e9b28 ***
我可以得到一個回溯不知何故?通過設置一些標誌可能是?
2]我的valgrind跑:
「的valgrind --leak檢查= YES ./myscript.py」
我沒有得到的東西多了,從它的一些線路:
glibc的檢測免費():無效指針:0x099e9b28
== 25728 ==
== 25728 ==條件跳轉或移動取決於未初始化值(S)
==在0x625AEA 25728 ==:PyObject_Free(在/usr/lib/libpython2.3。 so.1.0)
== 25728 == by 0x614C7F :(在/usr/lib/libpython2.3.so.1.0內)
== 25728 == by 0x61 EA53 :(在/usr/lib/libpython2.3.so.1.0內)
我沒有得到任何與我的代碼基本相關的任何東西。那麼還有什麼我應該用valgrind做的。
3]我試過printfs,它實際上沒有帶任何東西。
4]我試圖GDB:
提示> GDB蟒蛇
GDB>集ARGS myscript.py
GDB>運行
這將運行腳本,我不能設置任何斷點,它運行並打印錯誤。沒有絕對的幫助。還有什麼我應該做的GDB?任何方式來設置斷點?
非常感謝你們可以給我的任何一種指針。
我不知道它分析如何使用GDB,但是我使用Visual Studio調試了這些問題。我所做的是在腳本的開頭添加一個'input'語句來暫停它。當它暫停時,在VS中加載DLL(或.so)項目,我將它附加到python.exe。現在,您可以在C++代碼中設置斷點,並且在引發錯誤時調試器甚至可能會自動斷開。 – Praetorian 2013-03-06 19:23:43
感謝您的回覆。我試過它我正在使用命令行gdb,當我添加輸入,它期待輸入,我該如何設置斷點?我的意思是無論我在輸入什麼時候輸入,都會被解釋爲輸入。因此我不能設置斷點。有什麼我應該做的嗎? – Pkp 2013-03-06 19:38:15
嗯,VS的工作流程有很大的不同。當python腳本暫停(期待用戶輸入)時,您可以與VS IDE進行交互並設置斷點(在連接到正在運行的python進程之後)。然後你按回車鍵恢復腳本執行。我不知道這如何轉化爲使用GDB。 – Praetorian 2013-03-06 19:46:43