Linux下gdb調(diào)試打印棧幀中的變量過程
打印棧幀中變量的值
以下面代碼為例,操作 gdb 調(diào)試中,打印棧幀中的變量。
代碼如下:
#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 調(diào)試中,有時需要對棧幀中的變量值進行打印。
命令為: print 變量
打印棧幀中變量的前提是:gdb 調(diào)試先切換到該棧幀中。
- 首先,在需要打印的函數(shù)中打斷點。
- 其次,輸入 r 命令運行程序,程序會在斷點處停下來。
- 然后,輸入 bt 命令可以看到當前函數(shù)的調(diào)用關(guān)系,即涉及的各個函數(shù)棧幀信息。
- 最后,輸入 print data1 命令,查看 fun1() 中變量 data1 的值。
如下所示:

可以看到,輸入 print data1 命令后,data1 此時的值為 1 。
2. 在其他棧幀打印變量
在 gdb 調(diào)試中,也可不用切換到當前的棧幀中,打印該棧幀中的變量。
但是,需要保證變量所在的棧幀還沒有釋放,否則,是無法打印該棧幀中的變量的值的。
命令如: print fun1::data1 (打印函數(shù) fun1() 中變量 data1 的 值 )
- 首先,需要輸入 bt 命令,查看當前可以查看的棧幀中的變量(確認是否已經(jīng)釋放)。
- 其次,輸入 print fun1::data1 命令,查看變量 data1 的值。
如下所示:

可以看到,當輸入 print fun1::data1 命令后, data1 的值為 1 。
注意,如果要打印棧幀中變量的值。
首先,需要確認棧幀存在。即可輸入 bt 命令查看棧幀信息。
否則,可能棧幀已經(jīng)釋放,而無法打印變量的值。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux查看有線網(wǎng)卡和無線網(wǎng)卡的方法詳解
在 Linux 中查看有線網(wǎng)卡狀態(tài)的命令與查看無線網(wǎng)卡的命令類似,但側(cè)重點有所不同,以下是幾個最常用和有效的命令,并有詳細的代碼供大家參考,感興趣的小伙伴跟著小編一起來看看吧2025-10-10
ubuntu中python調(diào)用C/C++方法之動態(tài)鏈接庫詳解
這篇文章主要給大家介紹了關(guān)于如何在ubuntu中python調(diào)用C/C++方法之動態(tài)鏈接庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起看看吧2018-11-11
Linux內(nèi)核設(shè)備驅(qū)動之系統(tǒng)調(diào)用筆記整理
今天小編就為大家分享一篇關(guān)于Linux內(nèi)核設(shè)備驅(qū)動之系統(tǒng)調(diào)用筆記整理,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

