首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在gdb中为open(2)SysCall返回-1设置断点?

如何在gdb中为open(2)SysCall返回-1设置断点?
EN

Stack Overflow用户
提问于 2018-02-20 03:04:41
回答 2查看 0关注 0票数 0

操作系统: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))?

EN

Stack Overflow用户

发布于 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
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档