如何在GDB中根据栈地址查找对应的局部栈变量?
在GDB中根据栈地址查找局部符号的方法
单个栈地址匹配符号
直接使用info symbol命令定位地址对应的符号:
info symbol 0x12345678
如果该地址属于某个局部变量、函数参数或栈上的其他符号,GDB会直接返回符号名称及其所属的函数/栈帧信息。
查看单个栈帧的所有局部符号
先切换到目标栈帧(用frame <帧编号>,比如frame 0表示当前执行的栈帧),然后执行:
info locals
会列出当前栈帧内所有局部变量的名称、地址和值。加上-a参数可以显示更精确的内存范围:
info locals -a
方便你和GC输出的栈地址做精准匹配。
遍历整个调用栈的所有局部符号
要一次性查看所有栈帧的局部变量和参数,用完整回溯命令:
bt full
它会打印每个栈帧的调用信息,同时附带该帧内所有局部变量、参数的地址和值,你可以逐帧对比GC输出的栈地址范围,找到对应的符号。
补充:处理结构体成员类的地址
如果目标地址是某个结构体的成员地址,info symbol可能只会返回结构体变量本身,这时可以用ptype查看变量类型,再用x命令查看内存内容来确认具体成员:
ptype <结构体变量名> x/4x 0x12345678
内容的提问来源于stack exchange,提问作者Steven Schveighoffer
相关产品推荐
相关产品推荐

