GDB调试程序启动失败的问题

博主遇到gdb./u1运行缓慢的问题,通过检查发现磁盘空间不足导致/var目录满载。清理/var/crash并重建rpm数据库后,问题得以解决。关键步骤包括清理空间和重建rpmdb。

1.现象描述:

gdb ./u1 运行缓慢,提示

error: db5 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db5 - Resource temporarily unavailable (11)
error: cannot open Packages database in

 2.怀疑是磁盘资源不足导致

df -h查看磁盘空间,发现/var 目录的31G全部使用

/dev/mapper/rhel-var    31G   31G   31G  100% /var

清理目录/var/crash 14G之后,问题依旧

发现有条提示 yum --enablerepo='*debug*' install /usr/lib/debug/.build-id/b0/a1dfa62c6af7aa62487e3c260dc4b9c24d8bf8.debug

所以尝试yum --enablerepo='*debug*',结果报错

 3. 查找rpm的数据库损坏的解决方法

rpm --rebuilddb
yum clean all

yum repolist

然后再执行yum --enablerepo='*debug*',提示参数不对,但是已经没有报错了

再尝试gdb ./u1,问题解决

4.问题总结

a.清理/var目录的空间

b.重新构建rpmdb数据库

经过以上猛如虎的操作之后gdb ./u1运行正常了

怀疑/var磁盘空间不足,导致rpmdb和gdb运行时的db临时数据库损坏

 


 

### 使用 GDB 调试可执行程序并解决 'The program is not being run' 错误 #### 加载与启动可执行程序 为了使用 GDB 调试一个已有的可执行程序,首先需要加载该程序。这可以通过以下方式完成: - 输入 `gdb <program_name>` 来启动 GDB 并指定待调试的可执行文件[^1]。 - 或者,在进入 GDB 后通过命令 `(gdb) file <program_name>` 动态加载目标程序。 一旦成功加载了可执行文件,下一步就是让其运行起来。有几种方法可以做到这一点: - 使用 `(gdb) run [arguments...]` 命令来启动程序,并可以选择性地提供必要的命令行参数。 - 另外也可以采用 `(gdb) start` 方法,它会在程序入口点之前停止,允许你在实际开始执行前设置更多断点或其他调试选项[^2]。 如果尝试查看变量值、调用栈或者其他动态信息时收到消息 `"The program is not being run"`,则表明当前并没有处于运行状态下的进程可供查询。这时应回顾前面提到的方法确保程序已被正确启动。 #### 处理常见错误情景 当遇到 `'The program is not being run'` 的提示时,除了确认是否忘记启动之外还需要注意其他可能性: 1. **程序已完成执行** 如果先前已经完成了整个应用程序生命周期的操作(例如发送了一个 continue 指令直到结束),那么再次请求这些特定于活动进程中数据的动作自然会失败。此时简单的解决方案便是重新发起新一轮调试周期——即杀死现有实例后再跑一次新副本[(gdb) kill], [(gdb) run]. 2. **异常终止或崩溃** 应用可能由于各种原因提前结束了它的生命期(如段错误),这也使得后续任何针对那个短命版次的要求变得无意义。同样道理适用前述恢复策略即可恢复正常工作流。 下面给出一段简单例子演示基本流程: ```c // demo: malloc.c #include <stdio.h> #include <stdlib.h> int main(){ int* a = (int *)malloc(sizeof(int)); if(a != NULL){ *a = 5; printf("Value assigned successfully.\n"); } else{ perror("Failed to allocate memory"); } free(a); a = NULL; return 0; } ``` 假设我们想对此代码片段进行调试,按照如下步骤操作: ```bash $ gcc -o malloc_demo malloc.c -g # 编译调试信息版本 $ gdb ./malloc_demo # 开始调试 session (gdb) list # 查看源码部分区域,默认显示附近几行内容 ... (gdb) break main # 设立初始停靠站点便于介入分析 Breakpoint 1 at 0x... : file ..., line ... (gdb) run # 正式开启模拟运行模式 Starting program: /path/to/malloc_demo Breakpoint 1, main () at ...:line number.. (gdb) next # 单步前进过若干语句而不深入内部细节探讨 ... ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值