簡體   English   中英

如何在使用帶有gdb的LD_PRELOAD加載的動態庫中調試函數?

[英]How to debug functions in a dynamic library loaded with LD_PRELOAD with gdb?

我正在嘗試在動態共享庫libexecHook.so中調試一些函數。 這個庫預先加載設置LD_PRELOAD,以攔截和重寫對execve()和朋友的一些調用。 出於調試目的,我使用符號構建了gmake。 從我在其他問題中讀到的內容應該可行:

gdb ~/tmp/make-dfsg-3.81/make
set exec-wrapper env LD_PRELOAD=/home/marko/execHook.C027/lib/libexecHook.so.0.0.0
start
break execve
break execvp
cont

我確實看到斷點設置正確,例如

4       breakpoint     keep y   0x00007ffff7bd92e0 in execvp at execHook.c:128

但gdb永遠不會破壞我預裝的exec ..()函數。 在執行期間觀察調試輸出我看到我的庫函數正在被調用。

gdb沒有在我預加載的包裝器函數中斷的原因是這些是從沒有連接gdb的子進程執行的。 在Linux上,我可以

set follow-fork-mode child

使gdb附加到在vfork()創建的子級。

在設置斷點之前嘗試說start 這將開始運行程序,這將導致滿足庫依賴項,希望使用您的LD_PRELOAD路徑。 然后在啟動后設置斷點,然后繼續。

暫無
暫無

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

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