操作系统:GNU/Linux
发行版:opensuse 13.1
ARCH:x86-64
GDB版本:7.6.50.20130731-CVS
程序语言:主要是C语言,包含少量的程序集
想象一下,我有一个相当大的程序,有时无法打开一个文件。 是否可以在GDB中设置断点,以便在open(2)
系统调用返回-1之后停止?
当然,我可以通过源代码grep来查找所有open(2)
调用并缩小错误open()
调用,但也许有更好的方法。
我试图使用“catch系统调用打开”,然后“条件N,如果$ rax == - 1”,但显然它没有被击中。
是否有可能在GDB中调用系统调用(例如open(2)
)和从系统调用返回(例如open(2)
)?
发布于 2018-02-20 12:57:24
这个gdb脚本完成了所需的操作:
set $outside = 1
catch syscall open
commands
silent
set $outside = ! $outside
if ( $outside && $rax >= 0)
continue
end
if ( !$outside )
continue
end
echo `open' returned a negative value\n
end
https://stackoverflow.com/questions/-100004155
复制相似问题