2014-04-04 361 views
0

下午,任何人。 我有一個由main.c編譯的應用程序'test'。一個由test.cpp用'-g'編譯的動態連接'libtest.so'。在main.c中,我用'dlopen'調用'libtest.so'。現在我想在test.cpp中設置一個斷點,但是gdb從未打過它。我做如下:gdb如何在由dlopen打開的動態庫中設置斷點

GDB ./test -d /家庭/ LCL /測試

休息TEST.CPP:35

運行

任何人可以給我一些提示,謝謝!

+0

感謝回覆我,-d只是指向目錄gdb搜索。就像dir命令 –

+0

我試過了。行號35只是一個函數名稱。如果我用'gcc -c main.c -o test -ltest -L./'編譯test.c,我可以設置斷點,但用dlopen打開時失敗... –

+0

是的,但現在我必須吃晚飯。我將在稍後附上代碼。並感謝Mantosh Kumar –

回答

2

您應該首先確認dlopen實際上是否成功(很可能不是)。

要做到這一點:

  • 設置斷點main.cdlopen後。
  • 證實,返回的句柄是不是NULL

在這一點上,GDB應該已加載符號libtest.so,並libtest.soinfo shared GDB輸出顯示。

如果一切看起來不錯,info break應該在某個地址處顯示test.cpp:35的活動斷點。如果該斷點從未被擊中,那麼很可能你永遠不會實際執行該行代碼。