网站前后台代码,无锡本地模板网站建设产品,wordpress 图片下一页,视频网站后台模板debug - vscode gdb调试指南 文章目录 debug - vscode gdb调试指南前言一、调试代码二、命令查看main反汇编查看寄存器打印某个变量打印寄存器#xff0c;如pc打印当前函数栈信息#xff08;当前执行位置#xff09;打印程序栈局部变量x命令的语法如下所示#xff1a;打印某…debug - vscode gdb调试指南 文章目录 debug - vscode gdb调试指南前言一、调试代码二、命令查看main反汇编查看寄存器打印某个变量打印寄存器如pc打印当前函数栈信息当前执行位置打印程序栈局部变量x命令的语法如下所示打印某变量地址 前言
参考VSCode C/C(gdb)调试指南
命令参考 https://www.cnblogs.com/chengliangsheng/p/3597010.html
一、调试代码 #include stdio.h#include malloc.hint g_i 100;int g_j 200;int g_k, g_h;int main(int argc, char *argv[])
{const int MAXN 100;int *p (int*)malloc(MAXN * sizeof(int)); static int s_i 5;static int s_j 10;static int s_k;static int s_h;int i 5;int j 10;int k 20;int f, h;char *pstr1 magictong Hello World;char *pstr2 magictong Hello World;char *pstr3 Hello World;printf(堆中数据地址:x%08x\n, p);putchar(\n);printf(i 栈中数据地址(有初值):x%08x %d\n, i, i);printf(j 栈中数据地址(有初值):x%08x %d\n, j, j);printf(k 栈中数据地址(有初值):x%08x %d\n, k, k);printf(f 栈中数据地址(无初值):x%08x %d\n, f, f);printf(h 栈中数据地址(无初值):x%08x %d\n, h, h);putchar(\n);printf(s_i 静态数据地址(有初值):x%08x %d\n, s_i, s_i);printf(s_j 静态数据地址(有初值):x%08x %d\n, s_j, s_j);printf(s_k 静态数据地址(无初值):x%08x %d\n, s_k, s_k);printf(s_h 静态数据地址(无初值):x%08x %d\n, s_h, s_h);putchar(\n);printf(g_i 全局数据地址(有初值):x%08x %d\n, g_i, g_i);printf(g_j 全局数据地址(有初值):x%08x %d\n, g_j, g_j);printf(g_k 全局数据地址(无初值):x%08x %d\n, g_k, g_k);printf(g_h 全局数据地址(无初值):x%08x %d\n, g_h, g_h);putchar(\n); printf(pstr1 字符串常量数据地址:x%08x 指向0x%08x 内容为-%s\n, pstr1, pstr1, pstr1);printf(pstr2 字符串常量数据地址:x%08x 指向0x%08x 内容为-%s\n, pstr2, pstr2, pstr2);printf(pstr3 字符串常量数据地址:x%08x 指向0x%08x 内容为-%s\n, pstr3, pstr3, pstr3);free(p);return 0;}二、命令
查看main反汇编
-exec disassemble /m main
查看寄存器
-exec info r
打印某个变量
-exec print s 或者 --s
打印寄存器如pc
-exec print $pc
打印当前函数栈信息当前执行位置
-exec bt 或 -exec info f
打印程序栈局部变量
-exec info local
x命令的语法如下所示
x/ n、f、u是可选的参数。
n 是一个正整数表示显示内存的长度也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式参见上面。如果地址所指的是字符串那么格式可以是s如果地十是指令地址那么格式可以是i。
u 表示从当前地址往后请求的字节数如果不指定的话GDB默认是4个bytes。
u参数可以用下面的字符来代替b表示单字节h表示双字节w表示四字节g表示八字节。
当我们指定了字节长度后GDB会从指内存定的内存地址开始读写指定字节并把其当作一个值取出来。
表示一个内存地址。n/f/u三个参数可以一起使用。例如 命令x/3uh 0x54320表示从内存地址0x54320读取内容h表示以双字节为一个单位3表示三个单位u表示按十六进制显示。
16进制格式化打印16个单位的
-exec x/16x 0x5ffe60
打印某变量地址
-exec p buff