如何使用GDB命令查找计算变量h的函数及源代码位置?
在GDB中定位变量h的计算与声明位置
以下是几个直接可用的GDB命令,帮你找到变量h的来源(声明、计算它的函数或代码行):
查看变量的声明位置
先获取变量h的内存地址,再定位到对应的源代码行:p &h # 输出h的内存地址,比如$2 = (double *) 0x7fffffffe0a8 info line *0x7fffffffe0a8 # 替换为上面得到的地址,会显示变量所在的文件、行号和所属函数或者用更简洁的命令直接列出所有同名变量的信息:
info variables h该命令会展示所有名为
h的变量(包括全局、局部),以及它们的声明文件、行号和所属函数。追踪调用栈中的变量传递
如果h是通过函数参数传递到当前函数的,用回溯命令查看完整调用栈及各帧的变量细节:bt full这个命令会打印每个调用栈帧的局部变量、参数值等信息,你可以向上遍历栈帧,找到h最初被计算或传入的位置。
反向调试定位修改点
若能重新启动调试(编译时需添加-g3 -O0保证调试信息完整),可以设置观察点追踪h的修改动作:watch h # 当h的值被修改时触发断点 reverse-continue # 反向执行程序,直到h被修改的位置触发断点后,当前代码行就是h被计算或赋值的地方,再用
list命令查看上下文代码:list
内容的提问来源于stack exchange,提问作者Rebel
相关产品推荐
相关产品推荐

