每天学点GDB 4
本节侧重于如何用各种方法查看变量的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdlib.h> #include <stdio.h> void show_slogan( char * slogan); int counter; char * welcome_msg = "you are welcome!" ; int main( int argc, char ** argv) { int i = 0; counter = 0; show_slogan(welcome_msg); return 0; } void show_slogan( char * slogan) { printf ( "%s\n" ,slogan); counter++; printf ("you' |
编译
gcc -o test -g test.c |
启动gdb
gdb test |
gdb)br 10
gdb)r
程序运行至断点1,即行10
显示局部变量的值
gdb)info loal
i = 10
打印i的地址
gdb)p &i
$1 = (int *) 0x7fffffffe7cc
因为作者当前是64位cpu,故显示为64位指针
有了指针,就可以使用大杀器"x"
多费一句话,在gdb中,查看内存中到底放置了哪些东西关键的关键就是要学会使用x并理解其输出内容中的具体含义。
gdb)x 0x7fffffffe7cc
显示当前指针中包含的值,与p i的效果相同。
如果上述i的例子不能让你有较深印象的话,那么就用welcome_msg来说明问题中。
gdb)p welcome_msg
$5 = 0x400664 "you are welcome!"
现在有了welcome_msg的指针,有x来打印内容
gdb)x/s 0x400664
0x400664:"you are welcome!"
想到byte级别,好的使用修饰符c
gdb)x/16c 0x400664
0x400664: 121 'y' 111 'o' 117 'u' 32 ' ' 97 'a' 114 'r' 101 'e' 32 ' ' 0x40066c: 119 'w' 101 'e' 108 'l' 99 'c' 111 'o' 109 'm' 101 'e' 33 '! |
想来welcome_msg的例子可以让你切身体会到x的强大之处。
x后可以跟多种修饰符
显示x的帮助信息
gdb) help x
好了,今天的主要内容就是介绍赫赫有名的x.用好x就可以让内存中的内容无所遁形。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步