[英]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.