使用带有管道输入的gdb而不创建文件
我有一个接收管道输入的程序:使用带有管道输入的gdb而不创建文件,gdb,Gdb,我有一个接收管道输入的程序: bash> echo "something" | ./program 'seomthingelse' 在不创建新文件的情况下,如何将此输入重定向到gdb 在不创建新文件的情况下,如何将此输入重定向到gdb 您可以创建一个命名管道(不确定这是否算作“新文件”——为什么要避免使用新文件?) 您可以将延迟放入程序中,用echo“something”|/程序“seomthingelse”启动它,并在它仍处于延迟状态时从另一个窗口附加到它 第二种解决方案通常对那些
bash> echo "something" | ./program 'seomthingelse'
在不创建新文件的情况下,如何将此输入重定向到gdb
在不创建新文件的情况下,如何将此输入重定向到gdb
- 您可以创建一个命名管道(不确定这是否算作“新文件”——为什么要避免使用新文件?)
- 您可以将延迟放入程序中,用
启动它,并在它仍处于延迟状态时从另一个窗口附加到它echo“something”|/程序“seomthingelse”
int main(int argc, char *argv[])
{
if (getenv("WAIT_FOR_GDB") != NULL) {
int done = 0;
while (!done) sleep(1);
}
/* rest of main */
}
然后在环境中设置
WAIT\u FOR\u GDB
,并可以花费任意时间附加进程。连接后,从sleep
开始执行up
,set var done=1
,设置所需的任何其他断点,然后继续
,您可以使用gdbserver
执行此操作。stdin将对目标程序可用,未经修改
在一个终端会话中:
bash> echo "something" | gdbserver ./program 'seomthingelse'
Process ./program created; pid = 1591
Listening on port 1234
bash> gdb ./program
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
Loaded symbols for /lib/ld-linux.so.2
0x48611020 in _start () from /lib/ld-linux.so.2
(gdb)
此时,/program
刚启动就已暂停
在另一个终端会话中:
bash> echo "something" | gdbserver ./program 'seomthingelse'
Process ./program created; pid = 1591
Listening on port 1234
bash> gdb ./program
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
Loaded symbols for /lib/ld-linux.so.2
0x48611020 in _start () from /lib/ld-linux.so.2
(gdb)
gdbserver
可能位于发行版的gdb
软件包中,或者您可能需要安装另一个软件包。在Fedora上,它是gdbgdbserver