广东湘恒智能科技有限公司
主营产品: 西门子PLC代理商,plc变频器,伺服电机,人机界面,触摸屏,线缆,DP接头
SIEMENS江苏省泰州市 西门子代理商——西门子华东一级总代理

继续使用backtrace命令查看函数调用帧栈

gdb backtrace gdb

可以看出函数add()被主函数调用,主函数传入的start和end参数值。add()函数的栈帧号为0,主函数的栈帧号为1。

可以继续使用info locals命令查看add()函数中的局部变量的值,也可以使用frame 1命令先选择主函数所在的1号帧栈,再使用info locals命令查看主函数中的局部变量的值:

gdb info locals   0   0 gdb frame 1             add1, 10 gdb info locals   0 gdb

可以看到,add()函数中两个局部变量的值均被默认初始化为0,主函数中的局部变量result也被初始化为0。

如果局部变量默认不是初始化为0,可以在GDB环境下通过set var命令修改变量的值,并查看运行效果。由于程序在本电脑上运行无误,我们现在故意修改sum的初始值为100,并查看最终的运行结果:

gdb  var 100 No symbol  in current context. gdb frame 0            start i<end i++ gdb  var 100 gdb print sum   100 gdb info locals   0   100 gdb finish Run till  from  0x000055555555468a in main  at gdbtest.c:14             add1, 10 Value returned is   155 gdb

使用set var sum=100将sum的值修改为100,注意要切换到sum变量所在的帧栈环境中执行,然后可以使用print或info locals命令查看修改后的结果,接着使用finish命令使程序自动运行结果,可以看出最终的输出的结果为155,符合预期。最后可以使用quit命令退出GDB环境:

gdb quit A debugging session is active.         Inferior  process 31210 will be killed. Quit anyway? y or n y $

键入y确认退出即可。


展开全文
相关产品
拨打电话 微信咨询 发送询价