2013-03-30 65 views
1

我的程序產生一個子線程與execvp在xterm中運行另一個程序:如何在gdb中附加一個子進程?

char *argv[] = {"xterm", 
     "-e", 
       "./anotherProgram", 
     0 
}; 

execvp("xterm", argv); 

我知道anotherProgram正在運行,但在gdb,「信息線」並沒有表現出來。我如何附加子線程並進行調試?謝謝。

+3

'execvp()'覆蓋進程的地址空間。它既不創建新線程,也不創建新過程。 – 2013-03-30 21:32:45

+0

@ H2CO3然而,'xterm'然後進行fork和execs以運行'anotherProgram'(這是OP感興趣的過程)。 – thejh

回答

0

也許你只需使用ps aux | grep anotherProgram找到孩子的進程ID就足夠了,然後使用這樣的新gdb實例來附加它? gdb ./anotherProgram <pid>

如果沒有,你可以只打補丁的源代碼是這樣,並重新編譯:

char *argv[] = {"xterm", 
       "-e", 
       "gdb", 
       "./anotherProgram", 
       0 
}; 

execvp("xterm", argv); 

我不知道一個更清潔的方式來做到這一點。

相關問題