You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GDB提示缺失raise.c文件,捕获异常时报错如何解决?

解决GDB捕获异常时提示找不到raise.c文件的问题

嘿,这个问题我之前也碰到过,确实有点闹心!其实这是因为GDB默认会尝试定位系统底层调用的源码,但你的系统里没装对应的调试符号和源码包,所以才会弹出这个找不到文件的错误。下面给你几个实用的解决办法:

1. 安装系统库的调试包

这是最彻底的解决方式,装上之后GDB就能找到系统函数的调试信息,不会再报错了:

  • 如果你用的是Debian/Ubuntu系列发行版,执行这个命令:
    sudo apt-get install libc6-dbg
    
  • 如果是RHEL/CentOS/Fedora系列,执行:
    # RHEL/CentOS 7及以下
    sudo yum install glibc-debuginfo
    # RHEL/CentOS 8+ 或 Fedora
    sudo dnf install glibc-debuginfo
    

2. 让GDB跳过系统源码文件

如果你不想装额外的包,可以直接告诉GDB不要去加载这些系统底层的源码文件:

  • 在GDB会话里临时生效:
    set skip-file-regexp ../sysdeps/unix/sysv/linux/.*
    
  • 想永久生效的话,把上面的命令添加到你的~/.gdbinit文件里,下次启动GDB就自动生效了。

3. 提前捕获异常并查看信息,避免走到abort步骤

其实你可以在异常抛出时就查看信息,不用等程序触发SIGABRT:

  1. 启动GDB后先设置捕获异常:
    catch throw
    
  2. 运行程序,当GDB捕获到异常时,直接打印异常信息:
    # 查看当前抛出的异常详情
    info throw
    # 或者直接打印异常对象
    print *$exception
    
  3. 之后你可以选择continue或者quit,不用让程序走到调用raise()的环节,自然也就不会出现找不到文件的错误了。

简单解释下背后的原因:当你的C++异常没有被捕获时,程序会调用terminate()函数,最终触发raise(SIGABRT)来终止程序。GDB会尝试显示raise()函数的源码,但因为缺少调试包,所以才会提示找不到raise.c文件。

内容的提问来源于stack exchange,提问作者ClausH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:01