开启辅助访问 切换到窄版

打印 上一主题 下一主题

简明易记,linuxgdb命令速记手册

[复制链接]
作者:__嘘理解我 
版块:
嵌入式操作系统 linux 发布时间:2020-10-23 13:54:28
16990
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,启动程序

  • r(un):执行程序,如果没有设置断点,则直接把程序都执行完
  • start:执行程序到main函数后,停住。
2,常用命令

  • n(ext):下一条指令(不进入函数)
  • s(tep):进入函数
  • 回车:执行上一条命令
  • c:执行到下一个断点停住,如果后面没有断点,程序执行结束。
  • q:退出gdb
3,设置断点

  • b(reak):设置断点,b后面指定行号。
  • 指定行号
  • 指定文件名:行号
  • 指定 函数
  • 指定文件名:函数
  • 设置条件断点
  • 有个循环,当只想在循环变量i=2的时候,程序停住:【b 行号 if i == 2】
  • (gdb) info b
  • Num Type Disp Enb Address What
  • 1 breakpoint keep y 0x0000555555554748 in main at main.c:10
  • stop only if i == 2
4,查看源文件

  • l(list):查看源文件
  • 指定行号
  • 指定文件名:行号
  • 指定 函数
  • 指定文件名:函数
5,查看设置了哪些断点

  • info b
6,删除断点

  • d (el)断点的号码
例子:先用info b查看有哪些断点,注意Num列,如果想删除【src/add.c:4】处的断点,就执行【d 2】
(gdb) info b
Num Type Disp Enb Address What
2 breakpoint keep y 0x0000555555554667 in add at src/add.c:4
3 breakpoint keep y 0x000055555555468b in main at main.c:5
删除3号(src/add.c:4处的)断点:
(gdb) d 2
再用info b看看,发现2号断点没有了。
(gdb) info b
7,查看变量的值和变量的类型

  • 查看任何东西(变量/函数等)的值:p
  • 查看任何东西(变量/函数等)的类型:ptype
8,设置程序的启动参数

  • 先执行【set args 参数1],然后【r】
  • 直接执行【r 参数1】
9,修改变量的值

  • set var 变量=newValue
10,查看帮助

  • help 命令名字:比如查看set命令的具体用法,可以使用【help set】
11,每次单步执行都想观察变量的值,请使用【display】,不想看了,就用【undisplay】加Num的号码

  • display 变量的名字
  • undisplay Num(号码)
  • info display:可以查看display的Num(号码)
12,调试core文件,当出现:段错误(核心已转储)时,可以使用【gdb 程序名 core文件名】后,就能直接看到在哪行出错,如果没有显示,可以输入【where】,也可以定位到哪行出错。
但是core文件默认是不被生成的,如何让它生成呢,

  • 首先确认当前状态:【ulimit -c】,如果结果为0,说明不能生成core文件
  • 那么就设置core文件的允许大小:【ulimit -c unlimited】,也就是core文件大小没有限制,这样设置的好处是当core文件特别大的时候也能够被生成。当然也可以指定具体的大小【ulimit -c 1024000】等。
之后就有了下面的问题:
程序第一次执行出了错误后,就会在当前目录生成一个名字为【core】的文件,问题来了,如果又执行了一次,又出了错误后,又会生成一个【core】,这次的【core】就会覆盖掉上次的【core】,所以就需要设置如何生成【core】的文件名,达到每次生成的【core】的名字都不相同,就不会覆盖掉上次的core文件了。
选项如下:
%u:insert current uid into filename 添加当前的uid
%g:insert current gid into filename 添加当前的gid
%s:insert signal that caused the coredump into the filename 添加导致产生core的信号
%t:insert UNIX time that the coredump occurred into filename 添加core文件生成时间的unix时间
修改办法:

  • 切换到root用户
  • sudo su
  • 编辑/proc/sys/kernel/core_pattern文件,只能用下面的方法
  • echo "core-%e-%t" > /proc/sys/kernel/core_pattern
  • 然后生成的core文件的名字就变为:【core-app-1555987945】,注意程序的名字为app。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表