2014-03-25 25 views
1

我有一個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 
+0

這將幫助,如果你表現出確切的錯誤。如果gdb可以正確「列表」,這意味着它正在查找debuginfo。錯誤表明內核可能拒絕了這個請求;或者debuginfo中有一些錯誤。 –

+0

@TomTromey我編輯了我的問題 – simona

回答