我有一個Python代碼調用C編寫的共享庫(並編譯調試信息與標誌:-g -O0 -Wall -fPIC
)。 我想用gdb
進入c代碼。我執行以下操作:gdb發現調試信息,但不能把斷點
- 我從終端調用python代碼,並在內部調用
import pdb; pdb.set_trace()
代碼。 - 我的過程中重視
gdb
到Python進程
當我與gdb
附加的PID,對系統庫的一些調試信息都沒有找到(明顯),但我的共享庫的調試信息,找到。當我嘗試把一個斷點到的話,我寫b filename.c:30
源文件中的一個,但gdb
說,它不能訪問內存:
Cannot access memory at address 0x128a
可能的原因是我編的庫icc
和我在調試gdb
? 如果我會有點驚訝,因爲我已經成功地調試了其他與intel編譯的程序gdb
。
有什麼想法?
編輯: 我已經重新編譯使用gcc,我仍然有這個問題。我在想,爲了放置一個斷點,我需要在共享庫中使用該函數的名稱,我猜有一個前綴,如lib.function
。我怎麼知道這個前綴?
EDIT2: 我對這樣的事實感到困惑,如果我寫list <name of function>
,gdb
會告訴我與功能對應正確的源代碼
編輯:在一個
以下幾個方向回答我已經打開gdb並輸入以下命令:
(gdb)info functions f
All functions matching regular expression "f":
File ../source/ffile.c:
double f(double, double, double, double, double);
Non-debugging symbols:
0x0000000000000a68 [email protected]
(gdb)break f
Cannot access memory at address 0x124a
這將幫助,如果你表現出確切的錯誤。如果gdb可以正確「列表」,這意味着它正在查找debuginfo。錯誤表明內核可能拒絕了這個請求;或者debuginfo中有一些錯誤。 –
@TomTromey我編輯了我的問題 – simona