Linux下gdb调试打印栈帧中的变量过程

 更新时间:2023年09月04日 09:52:35   作者:凌肖战  
这篇文章主要介绍了Linux下gdb调试打印栈帧中的变量过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

打印栈帧中变量的值

以下面代码为例,操作 gdb 调试中,打印栈帧中的变量。

代码如下:

#include <stdio.h>
int fun1(void)
{
    int data1 = 0;
    printf("---data1: %d\n", data1);
    return data1++;
}
int fun2(void)
{
    int data2 = 0;
    data2 = 2*fun1();
    return data2;
}
int main(void)
{
    int data = 0;
    data = fun2();
    printf("---data: %d\n", data);
    return 0;
}

1. 在当前栈帧打印变量

gdb 调试中,有时需要对栈帧中的变量值进行打印。

命令为: print  变量

打印栈帧中变量的前提是:gdb 调试先切换到该栈帧中。

  • 首先,在需要打印的函数中打断点。
  • 其次,输入 r 命令运行程序,程序会在断点处停下来。
  • 然后,输入 bt 命令可以看到当前函数的调用关系,即涉及的各个函数栈帧信息。
  • 最后,输入 print data1 命令,查看 fun1() 中变量 data1 的值。

如下所示:

可以看到,输入 print data1 命令后,data1 此时的值为 1

2. 在其他栈帧打印变量

gdb 调试中,也可不用切换到当前的栈帧中,打印该栈帧中的变量。

但是,需要保证变量所在的栈帧还没有释放,否则,是无法打印该栈帧中的变量的值的。

命令如: print fun1::data1    (打印函数 fun1() 中变量 data1 的 值 )

  • 首先,需要输入 bt 命令,查看当前可以查看的栈帧中的变量(确认是否已经释放)。
  • 其次,输入 print fun1::data1 命令,查看变量 data1 的值。

如下所示:

可以看到,当输入 print fun1::data1 命令后, data1 的值为 1

注意,如果要打印栈帧中变量的值。

首先,需要确认栈帧存在。即可输入 bt 命令查看栈帧信息。

否则,可能栈帧已经释放,而无法打印变量的值。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Linux查看有线网卡和无线网卡的方法详解

    Linux查看有线网卡和无线网卡的方法详解

    在 Linux 中查看有线网卡状态的命令与查看无线网卡的命令类似,但侧重点有所不同,以下是几个最常用和有效的命令,并有详细的代码供大家参考,感兴趣的小伙伴跟着小编一起来看看吧
    2025-10-10
  • 7个Linux 命令轻松搞定线上Java日志管理难题

    7个Linux 命令轻松搞定线上Java日志管理难题

    在线上Java应用的运维工作中,日志管理是至关重要的一环,本文将针对这些常见难题,介绍7个实用的Linux命令,帮助你轻松搞定线上Java日志管理,希望对大家有所帮助
    2025-07-07
  • Linux 下解压 rar 文件的方法

    Linux 下解压 rar 文件的方法

    这篇文章主要介绍了Linux 下解压 rar 文件的方法,需要的朋友可以参考下
    2018-07-07
  • ubuntu中python调用C/C++方法之动态链接库详解

    ubuntu中python调用C/C++方法之动态链接库详解

    这篇文章主要给大家介绍了关于如何在ubuntu中python调用C/C++方法之动态链接库的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧
    2018-11-11
  • Ubuntu常用指令及用法详解

    Ubuntu常用指令及用法详解

    本文重点给大家介绍Ubuntu常用指令及用法,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-06-06
  • Linux SSH 安全策略 限制 IP 登录方法

    Linux SSH 安全策略 限制 IP 登录方法

    Linux SSH 安全策略 限制 IP 登录方法,使用linux的朋友可以参考下
    2012-07-07
  • Linux进程间通信(IPC)的几种方式总结

    Linux进程间通信(IPC)的几种方式总结

    进程间通信是指至少两个进程或线程间传送数据或信号的一些技术或方法,每个进程都有自己的一部分独立的系统资源,彼此是隔离的,为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信,本文就给大家介绍几种Linux进程间通信的方式,需要的朋友可以参考下
    2023-09-09
  • Linux gzip 命令的使用

    Linux gzip 命令的使用

    这篇文章主要介绍了Linux gzip 命令的使用,帮助大家更好的理解和学习Linux系统,感兴趣的朋友可以了解下
    2020-08-08
  • 在VMware虚拟机里安装Linux操作系统

    在VMware虚拟机里安装Linux操作系统

    这篇文章介绍了在VMware虚拟机里安装Linux操作系统的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Linux内核设备驱动之系统调用笔记整理

    Linux内核设备驱动之系统调用笔记整理

    今天小编就为大家分享一篇关于Linux内核设备驱动之系统调用笔记整理,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论