Linux下gdb調(diào)試打印棧幀中的變量過(guò)程
打印棧幀中變量的值
以下面代碼為例,操作 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)試中,有時(shí)需要對(duì)棧幀中的變量值進(jìn)行打印。
命令為: print 變量
打印棧幀中變量的前提是:gdb 調(diào)試先切換到該棧幀中。
- 首先,在需要打印的函數(shù)中打斷點(diǎn)。
- 其次,輸入 r 命令運(yùn)行程序,程序會(huì)在斷點(diǎn)處停下來(lái)。
- 然后,輸入 bt 命令可以看到當(dāng)前函數(shù)的調(diào)用關(guān)系,即涉及的各個(gè)函數(shù)棧幀信息。
- 最后,輸入 print data1 命令,查看 fun1() 中變量 data1 的值。
如下所示:
可以看到,輸入 print data1 命令后,data1 此時(shí)的值為 1 。
2. 在其他棧幀打印變量
在 gdb 調(diào)試中,也可不用切換到當(dāng)前的棧幀中,打印該棧幀中的變量。
但是,需要保證變量所在的棧幀還沒(méi)有釋放,否則,是無(wú)法打印該棧幀中的變量的值的。
命令如: 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)釋放,而無(wú)法打印變量的值。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
VmWare安裝centos7無(wú)法上網(wǎng)的解決方法
這篇文章主要為大家詳細(xì)介紹了VmWare安裝centos7無(wú)法上網(wǎng)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10一分鐘掌握l(shuí)inux系統(tǒng)目錄結(jié)構(gòu)
這篇文章主要介紹了linux系統(tǒng)目錄結(jié)構(gòu),通過(guò)結(jié)構(gòu)圖和多張表格了解linux系統(tǒng)目錄結(jié)構(gòu),感興趣的小伙伴們可以參考一下2016-05-05基于CentOS的Hadoop分布式環(huán)境的搭建開(kāi)發(fā)
本篇文章介紹了基于CentOS的Hadoop分布式環(huán)境的搭建開(kāi)發(fā),有興趣的可以了解一下。2016-11-11詳解如何使用Spark和Scala分析Apache訪問(wèn)日志
這篇文章主要介紹了詳解如何使用Spark和Scala分析Apache訪問(wèn)日志,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06apache使用日志分割模塊rotatelogs分割日志詳解
本文介紹了apache使用自帶的日志分割模塊rotatelogs分割日志,rotatelogs 是 Apache 2.2 中自帶的管道日志程序,具體使用方法請(qǐng)參考下文2014-01-01Linux加入windows ad域步驟詳解(winbindsamba方案)
本文主要實(shí)驗(yàn)centos加入windows AD的方法,大家參考使用2013-12-12linux系統(tǒng)對(duì)外開(kāi)放3306、8080等端口,防火墻設(shè)置詳解
這篇文章主要介紹了linux系統(tǒng)對(duì)外開(kāi)放3306、8080等端口,防火墻設(shè)置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05