2013-01-09 33 views
0

我面臨的情況是,其中有一個處理X執行 命令(比如/bin/ls)。只要進程X執行命令ls 我想在ls的函數中放置一個斷點。在由其他進程啓動的進程中設置斷點

有沒有辦法做到這一點?

+0

不確定,但我會讀這:http://sourceware.org/gdb/onlinedocs/gdb/Forks.html – dbrank0

回答

1

一個簡單的解決方案可能是在調試會話中啓動進程的小shell腳本中包含有問題的二進制文件(由進程X調用),並應用預配置的斷點。

1

我可以想到兩種方法來做到這一點。

  1. 最簡單的就是set follow-fork-mode child無論何時創建新的客戶端進程,GDB都會調試子進程。但是,使用這種模式,您將無法再調試父進程。

  2. 在子過程(上述ls)添加一些代碼來等待一個信號說SIGCONT在開始的時候。每當創建子進程時,都要將GDB(新的GDB實例)與其子進程的PID相關聯,然後發出SIGNING信號繼續。

0

您可以使用catch exec [1]停止對exec電話:

(gdb) catch exec 
Catchpoint 1 (exec) 
(gdb) r 
Starting program: /tmp/a.out 
process 7544 is executing new program: /bin/ls 

Catchpoint 1 (exec'd /bin/ls), 0x00007ffff7ddfaf0 in _start() from /lib64/ld-linux-x86-64.so.2 

然後,你可以做任何你想用新工藝。對於各種與叉相關的選項,請參閱link in the commentdbrank0