gcc默认编译的时候,gdb调试过程中是不能看到宏定义的,"p 宏名" 会显示错误,如下: (gdb) p CLIENT6_BEGIN_FLG No symbol "CLIENT6_BEGIN_FLG" in current context. (gdb) 其中#define CLIENT6_BEGIN_FLG "<Client6>" 这样gdb调试过程中就很不直观,尤其是很多大型程序中,宏定义比较复杂的时候。 如果需要...
(gdb) info register 通过disassemble /m main来将源码和汇编一起显示,ni执行下一条汇编指令.info register来显示汇编信息,core 的位置的指令为:0x0000000000400676 <+57>: movb $0x1,(%rax)将 1 赋值给 rax 寄存器保存的地址, 我们可以看下 rax 寄存器,p $rax直接打印,然后通过x /x 0x12345来测试下这个...
在GDB下, 我们无法print宏定义,因为宏是预编译的。 但是我们还是有办法来调试宏,这个需要GCC的配合。 在GCC编译程序的时候,加上 -ggdb3参数,这样,你就可以调试宏了。 另外,你可以使用下述的GDB的宏调试命令 来查看相关的宏。 info macro 查看这个宏在哪些文件里被引用了,以及宏定义是什么样的。 macro 查看宏...
1、打开GDB:gdb 2、打开要调试的文件:file xxx 设置参数:set args xxx xxx 显示缺省的参数列表:show args 3、在某处(第几行)下断点:break x 删除N号断点:delete N *删除所有断点: delete 4、单步调试,步…
p 命令表示 打印值. n表示过程调试, 到下一步. 不管子过程如何都不进入. 直接一次跳过. 上面用的s 表示单步调试, 遇到子函数,会进入函数内部调试. 总结一下 .l 查看源码 , b 加断点, r 开始运行调试, n 下一步, s下一步但是会进入子函数. p 输出数据. ...
先在shm_zone->init = NULL;代码所对应的第1318行先下一个Breakpoint,执行Nginx后将在此处暂停程序,通过p指令打印获取shm_zone->init的地址值,然后直接给shm_zone->init对应的地址下个Watchpoint进行监视。这样即便是跑出shm_zone->init变量所在的作用域也没有关系,执行c命令继续执行Nginx,一旦shm_zone->init被...
(gdb) p *array@len$1 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40} 如果是静态数组的话,可以直接用print数组名,就可以显示数组中所有数据的内容了。 输出格式 一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例...
-D name=definition //加入宏定义,若不指定def,则默认为1 -O1、-O2 //规定编译器的优化等级,优化级数越高执行效率一般越好,但是优化会改变原有程序结构,使得其汇编不易理解 //一些进行缓冲区溢出实验时可能需要的选项 -fstack-protector-fno-stack-protector //是否开启堆栈保护,这里的保护是在返回地址之前加入一...
p <变量名>:打印某个变量名 x/<长度><n进制><字宽>,比如说x/10xb <地址>:打印<地址>开始的10个地址,以十六进制的单字节输出。这里的10可以是任意的长度,x还可以用x’, ‘d’, ‘u’, ‘o’, ‘t’, ‘a’, ‘c’, ‘f’, ‘s’),比如这里的d是数字的意思,s是字符串的意思。b可以用(...
print variable:打印变量variable的值(简写p)。 watch variable: 监视变量variable的值,当变量的值发生改变时,停止程序的执行(简写w)。 continue:继续执行程序直到下一个断点或程序结束(简写c)。 backtrace:显示当前函数调用的堆栈跟踪信息(简写bt)。 quit:退出GDB调试器(简写q)。 finish: 执行到当前函数返回为止(简...