簡體   English   中英

glibc檢測到*** free():無效的指針:Python c ++和Swig

[英]glibc detected *** free(): invalid pointer: Python c++ and Swig

我必須運行一些用Python編寫的單元測試。 我們有要在c ++中進行測試的代碼,因此我將其編譯為共享對象,並使用swig為python腳本提供了接口以調用必要的api進行測試。

現在,當我運行一個python腳本(顯然正在訪問我打算測試的c ++代碼庫)時,我得到了“ glibc檢測到的free():無效指針”。 現在,我確實知道存在一些內存問題,可能是兩次釋放,或者我正在釋放無法訪問的內存。 現在,我向您請專家:

1]我沒有得到任何回溯記錄(甚至沒有行號),是否有辦法知道問題出在哪里? 除了腳本突然停止並打印類似內容外,我沒有任何其他信息
***檢測到glibc * free():無效的指針:0x099e9b28 ***
我能以某種方式獲得追溯嗎? 通過設置一些標志可能是?

2]我跑了valgrind:
“ valgrind --leak-check =是./myscript.py”
我沒有得到太多,從中得到一些啟示:
glibc檢測到free():無效的指針:0x099e9b28
== 25728 ==
== 25728 ==條件跳轉或移動取決於未初始化的值
== 25728 ==在0x625AEA:PyObject_Free(在/usr/lib/libpython2.3.so.1.0中)
== 25728 ==通過0x614C7F:(在/usr/lib/libpython2.3.so.1.0內)
== 25728 ==通過0x61EA53:(在/usr/lib/libpython2.3.so.1.0內)

我基本上沒有得到任何與我的代碼相關的信息。 所以還有其他我應該用valgrind做的事情。

3]我嘗試了printfs,實際上沒有任何幫助。
4]我嘗試了gdb:
提示> gdb python
gdb>設置參數myscript.py
gdb>運行

這將運行腳本,我無法設置任何斷點,它將運行並顯示錯誤。 沒有絕對的幫助。 GDB還有其他我應該做的事情嗎? 有什么辦法設置斷點?

非常感謝你們給我的任何指針。

我終於想通了! 我執行了命令
ulimit -c無限

之后,我看到一個核心轉儲,現在我可以通過分析它了
gdb /usr/bin/python2.3 core.31685

我已經使用Google的堆檢查器成功調試了此類問題。 它將為您提供分配點和釋放點的堆棧跟蹤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM