Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你能用tcsh作为shell重定向GDB中的stderr吗?_Gdb - Fatal编程技术网

你能用tcsh作为shell重定向GDB中的stderr吗?

你能用tcsh作为shell重定向GDB中的stderr吗?,gdb,Gdb,我正在调试一些代码,当我单步执行一个线程时,我会从另一个线程将大量超时错误消息打印到STDERR。我想把印到stderr的东西都藏起来。我尝试在启动应用程序时使用重定向: (gdb) run 2> /dev/null 但这似乎也在重定向stdout,我需要它在遍历代码时调用对象上的漂亮打印函数 PS我正在使用GDB 7.2,不,我无法升级:( PPS我认为这不会依赖于shell,但我正在运行tcsh 6.17,请尝试使用“set args”命令: (gdb) set args 2>

我正在调试一些代码,当我单步执行一个线程时,我会从另一个线程将大量超时错误消息打印到STDERR。我想把印到stderr的东西都藏起来。我尝试在启动应用程序时使用重定向:

(gdb) run 2> /dev/null
但这似乎也在重定向stdout,我需要它在遍历代码时调用对象上的漂亮打印函数

PS我正在使用GDB 7.2,不,我无法升级:(


PPS我认为这不会依赖于shell,但我正在运行tcsh 6.17,请尝试使用“set args”命令:

(gdb) set args 2>/dev/null
(gdb) run
[编辑:@invalid entry的答案是正确的。至少对于最近的gdb,您可以在
set args
run
命令上执行每fd重定向。我不确定gdb何时确切学会了如何执行此操作。如果它对您不起作用,下面的解决方案可能仍然有用。]

我认为用
run
命令识别的普通shell重定向没有办法做到这一点。但是,您可以使用gdb手动将subsier的stderr流重定向到一个文件

差不多

# get the program started
break __libc_start_main
run
# open a new filehandle to /dev/null. the 1 is the value of the
# O_WRONLY constant, cause we want to open /dev/null in write mode.
set $nullfd = open("/dev/null", 1)
# make fd 2 (stderr) be a copy of that new handle
call dup2($nullfd, 2)
# we can close the new handle now (optional)
call close($nullfd)
# let the program carry on
cont
将执行此任务,覆盖以前在fd 2打开的任何内容(之前存在的东西可能是终端的句柄)。在此之后,对stderr的任何写入都将转到
/dev/null


显然,这可能需要根据您的平台进行调整。您的可执行文件中可能没有
\u libc\u start\u main
符号;
main
可能会起作用。

在我的例子中,根本原因是使用了tcsh。它没有任何方法只重定向stderr,而gdb显然正在将这些重定向字符串传递给shell解释。有,但我无法让它们在GDB内部工作。如果你使用sane shell,那么就可以了。我从来没有机会进行测试,因为那时我已经退出了该项目,但它可能与tcsh一起工作。如果有人验证它是否工作,我将更改所选答案。

这对我不起作用,它重定向了输入和输出与上面的原始示例相同。