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)文章
VmWare安裝centos7無法上網(wǎng)的解決方法
這篇文章主要為大家詳細(xì)介紹了VmWare安裝centos7無法上網(wǎng)的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10一分鐘掌握linux系統(tǒng)目錄結(jié)構(gòu)
這篇文章主要介紹了linux系統(tǒng)目錄結(jié)構(gòu),通過結(jié)構(gòu)圖和多張表格了解linux系統(tǒng)目錄結(jié)構(gòu),感興趣的小伙伴們可以參考一下2016-05-05基于CentOS的Hadoop分布式環(huán)境的搭建開發(fā)
本篇文章介紹了基于CentOS的Hadoop分布式環(huán)境的搭建開發(fā),有興趣的可以了解一下。2016-11-11apache使用日志分割模塊rotatelogs分割日志詳解
本文介紹了apache使用自帶的日志分割模塊rotatelogs分割日志,rotatelogs 是 Apache 2.2 中自帶的管道日志程序,具體使用方法請參考下文2014-01-01Linux加入windows ad域步驟詳解(winbindsamba方案)
本文主要實驗centos加入windows AD的方法,大家參考使用2013-12-12linux系統(tǒng)對外開放3306、8080等端口,防火墻設(shè)置詳解
這篇文章主要介紹了linux系統(tǒng)對外開放3306、8080等端口,防火墻設(shè)置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05