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 – ...
在GDB下, 我们无法print宏定义,因为宏是预编译的。 但是我们还是有办法来调试宏,这个需要GCC的配合。 在GCC编译程序的时候,加上 -ggdb3参数,这样,你就可以调试宏了。 另外,你可以使用下述的GDB的宏调试命令 来查看相关的宏。 info macro 查看这个宏在哪些文件里被引用了,以及宏定义是什么样的。 macro 查看宏...
编译时还需要加上-g选项让编译生成的可执行文件中包含足够的调试信息,包含代码、栈、局部变量等,若还需查看更多信息如宏定义则需添加-g3选项,这样就可以通过print命令打印宏定义信息。 测试如下:编译进入调试界面 编译进入调试界面 调试界面 3基本常用命令:(以下这些命令可以满足程序基本调试,有兴趣可去参考官方说明ht...
1. 首先对上面正文第一部分加深 gdb调试宏 首先看上面命令 macro expand 宏(参数)=>得到宏导出内容. info macro 宏名 => 宏定义内容 如果你需要用到上面gdb功能, 查看和导出宏的话.还需要gcc 支持,生成的时候加上-ggdb3如下 gcc -Wall -ggdb3 -o houge.out houge.c ...
long ptrace(request,pid_t pid, void *addr, void *data)request:宏定义,比如说PTRACE_TRACEME, ...
宏定义 .h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。 对于宏定义,在gdb调试中值一般不可见,在编译时加入-gdwarf-2 -g3参数,可使宏定义的值可查看。 gcc -g -gdwarf-2 -g3 test.c -o test 将宏定义加进去编译 ...
(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的输出的格式。例...
先在shm_zone->init = NULL;代码所对应的第1318行先下一个Breakpoint,执行Nginx后将在此处暂停程序,通过p指令打印获取shm_zone->init的地址值,然后直接给shm_zone->init对应的地址下个Watchpoint进行监视。这样即便是跑出shm_zone->init变量所在的作用域也没有关系,执行c命令继续执行Nginx,一旦shm_zone->init被...