欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux下gdb調(diào)試打印棧幀中的變量過程

 更新時間:2023年09月04日 09:52:35   作者:凌肖戰(zhàn)  
這篇文章主要介紹了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. 在當(dāng)前棧幀打印變量

gdb 調(diào)試中,有時需要對棧幀中的變量值進行打印。

命令為: print  變量

打印棧幀中變量的前提是:gdb 調(diào)試先切換到該棧幀中。

  • 首先,在需要打印的函數(shù)中打斷點。
  • 其次,輸入 r 命令運行程序,程序會在斷點處停下來。
  • 然后,輸入 bt 命令可以看到當(dāng)前函數(shù)的調(diào)用關(guān)系,即涉及的各個函數(shù)棧幀信息。
  • 最后,輸入 print data1 命令,查看 fun1() 中變量 data1 的值。

如下所示:

可以看到,輸入 print data1 命令后,data1 此時的值為 1 。

2. 在其他棧幀打印變量

gdb 調(diào)試中,也可不用切換到當(dāng)前的棧幀中,打印該棧幀中的變量。

但是,需要保證變量所在的棧幀還沒有釋放,否則,是無法打印該棧幀中的變量的值的。

命令如: print fun1::data1    (打印函數(shù) fun1() 中變量 data1 的 值 )

  • 首先,需要輸入 bt 命令,查看當(dāng)前可以查看的棧幀中的變量(確認(rèn)是否已經(jīng)釋放)。
  • 其次,輸入 print fun1::data1 命令,查看變量 data1 的值。

如下所示:

可以看到,當(dāng)輸入 print fun1::data1 命令后, data1 的值為 1 。

注意,如果要打印棧幀中變量的值。

首先,需要確認(rèn)棧幀存在。即可輸入 bt 命令查看棧幀信息。

否則,可能棧幀已經(jīng)釋放,而無法打印變量的值。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論