gdb调试命令

 

/* main.c */
#include

int world(int *a, int *b, int *c, int *d,int *e,int *f,int *a1, int *b1, int *c1, int *d1,int *e1,int *f1){

    int sum=*a+*b+*c+*d+*e+*f+*a1+*b1+*c1+*d1+*e1+*f1;
    return sum;
}

int hello(int *a, int *b, int *c, int *d,int *e,int *f,int *a1, int *b1, int *c1, int *d1,int *e1,int *f1){

    int sum = world(a,b,c,d,e,f,a1,b1,c1,d1,e1,f1);
    return sum++;
}

int main(void){

    int a,b,c,d,e,f,a1,b1,c1,d1,e1,f1;
    a=1;
    b=2;
    c=3;
    d=4;
    e=5;
    f=6;
    a1=11;
    b1=12;
    c1=13;
    d1=14;
    e1=15;
    f1=16;
    hello(&a,&b,&c,&d,&e,&f,&a1,&b1,&c1,&d1,&e1,&f1);
    return 0;
}

aarch64-linux-gnu-gcc main.c -g -O0, 好像是O0才行。

把main.c与a.out放在一起,

gdb a.out后输入start 开始

gdb调试命令_第1张图片

 list 显示源码:

gdb调试命令_第2张图片

layout src显示c源码:

gdb调试命令_第3张图片

layout asm显示汇编:

gdb调试命令_第4张图片

s ,下一条c语句:

gdb调试命令_第5张图片

si,下一条汇编

gdb调试命令_第6张图片

 i r,显示寄存器:

gdb调试命令_第7张图片

 gdb调试命令_第8张图片

 

(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h

(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r

(gdb)start:单步执行,运行程序,停在第一执行语句

(gdb)list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l

(gdb)set:设置变量的值

(gdb)next:单步调试(逐过程,函数直接执行),简写n

(gdb)step:单步调试(逐语句:跳入自定义函数内部执行),简写s

(gdb)backtrace:查看函数的调用的栈帧和层级关系,简写bt

(gdb)frame:切换函数的栈帧,简写f

(gdb)info:查看函数内部局部变量的数值,简写i

(gdb)finish:结束当前函数,返回到函数调用点

(gdb)continue:继续运行,简写c

(gdb)print:打印值及地址,简写p

(gdb)quit:退出gdb,简写q

(gdb)break+num:在第num行设置断点,简写b

(gdb)info breakpoints:查看当前设置的所有断点

(gdb)delete breakpoints num:删除第num个断点,简写d

(gdb)display:追踪查看具体变量值

(gdb)undisplay:取消追踪观察变量

(gdb)watch:被设置观察点的变量发生修改时,打印显示

(gdb)i watch:显示观察点

(gdb)enable breakpoints:启用断点

(gdb)disable breakpoints:禁用断点

(gdb)x:查看内存x/20xw 显示20个单元,16进制,4字节每单元

(gdb)run argv[1] argv[2]:调试时命令行传参

(gdb)set follow-fork-mode child#Makefile项目管理:选择跟踪父子进程(fork())

run:简记为 r ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。
continue (简写c ):继续执行,到下一个断点处(或运行结束)
next:(简写 n),单步跟踪程序,当遇到函数调用时,也不进入此函数体;此命令同 step 的主要区别是,step 遇到用户自定义的函数,将步进到函数中去运行,而 next 则直接调用函数,不会进入到函数体内。
step (简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的
list :简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。
list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
list 函数名:将显示“函数名”所在函数的源代码,如:list main
print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。
print a:将显示整数 a 的值
print/x  用16进制表示var
i r rax: 表示rax寄存器的值
i r:表示所有寄存器的值
layout src:显示源代码窗口
layout asm:显示反汇编窗口

你可能感兴趣的:(linux,app,linux)