gdb面试题总结

gdb 调试 coredump文件

  • coredump文件又叫核心转储文件,是进程运行时突然崩溃的瞬间,进程在内存中的一个快照。会把进程此刻内存/寄存器状态/运行堆栈信息等存储在一个文件里
  1. 如果coredump文件没有产生怎么办
    1. 通过ulimit -a查看core file size 查看内核core文件大小限制,如果大小小于产生的coredump文件,那么就不会产生coredump文件,再看磁盘大小,如果磁盘空闲空间页不够,那也不会产生, 通过ulimit -c unlimited设置到无上限
  2. 命令
    gdb 可执行文件 coredump文件
  3. 调试思路:
    1. 查看调用堆栈,分析崩溃原因。bt 查看栈帧 f n,n是编号,进入指定的栈帧号,通常最大编号是main,0是最后一个栈帧
    2. 根据崩溃点,查看代码分析原因
    3. 修复bug

gdb调试多线程程序

调试多线程时,需要使用调度器锁

  1. 运行需要调试的程序
  2. ps -aux | grep a.out 找到进程的pid
  3. top -Hp pid 查看进程的线程状况
  4. gdb attach pid 进入进程开始gdb调试
    进入gdb后,info threads, thread n 进入第n线程
    必须在线程创建完成后才能设置
  • show secheduler-locking ,查看调度器锁
  • set secheduler-locking off:不锁定任何线程,调试某一个线程时,其他线程也会继续运行(抢占式执行)
  • set secheduler-locking on:只有当前线程可以运行
  • set secheduler-locking step: 当单步调试某一个线程时,保证在调试过程中当前线程不会发生改变,其他线程也会随着被调试线程的单步执行而单步执行。如果该模式下执行continue、until、finish,其他线程也会执行,其他线程在这一过程遇到断点,gdb会切换到该线程
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值