新聞中心
linux print命令
具體參數(shù)及講解如下:
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),孟連企業(yè)網(wǎng)站建設(shè),孟連品牌網(wǎng)站建設(shè),網(wǎng)站定制,孟連網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,孟連網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
print命令的格式是:
print xxx
p xxx
1. print 操作符
@
是一個(gè)和數(shù)組有關(guān)的操作符,在后面會(huì)有更詳細(xì)的說明。
::
指定一個(gè)在文件或是一個(gè)函數(shù)中的變量。
{}
表示一個(gè)指向內(nèi)存地址的類型為type的一個(gè)對(duì)象。
2. 察看內(nèi)容
全局變量(所有文件可見的)
靜態(tài)全局變量(當(dāng)前文件可見的)
局部變量(當(dāng)前Scope可見的)
如果你的局部變量和全局變量發(fā)生沖突(也就是重名),一般情況下是局部變量會(huì)隱藏全局變量。如果此時(shí)你想查看全局變量的值時(shí),你可以使用“::”操作符:
file::variable
function::variable
eg:
查看文件f2.c中的全局變量x的值:
gdb) p 'f2.c'::x
注:如果你的程序編譯時(shí)開啟了優(yōu)化選項(xiàng),那么在用GDB調(diào)試被優(yōu)化過的程序時(shí),可能會(huì)發(fā)生某些變量不能訪問,或是取值錯(cuò)誤碼的情況。對(duì)付這種情況時(shí),需要在編譯程序時(shí)關(guān)閉編譯優(yōu)化。GCC,你可以使用“-gstabs” 選項(xiàng)來解決這個(gè)問題。
3. 察看數(shù)組
(1)動(dòng)態(tài)數(shù)組:
p *array@len
array:數(shù)組的首地址,len:數(shù)據(jù)的長(zhǎng)度
eg:
(gdb) p *array@len
$1 = {2, 4, 6, 8, 10}
(2)靜態(tài)數(shù)組
可以直接用print數(shù)組名,就可以顯示數(shù)組中所有數(shù)據(jù)的內(nèi)容了。
4. 輸出格式
x 按十六進(jìn)制格式顯示變量。
d 按十進(jìn)制格式顯示變量。
u 按十六進(jìn)制格式顯示無符號(hào)整型。
o 按八進(jìn)制格式顯示變量。
t 按二進(jìn)制格式顯示變量。
a 按十六進(jìn)制格式顯示變量。
c 按字符格式顯示變量。
f 按浮點(diǎn)數(shù)格式顯示變量。
eg:
(gdb) p i
$21 = 101
(gdb) p/a i
$22 = 0x65
(gdb) p/c i
$23 = 101 'e'
5. 察看內(nèi)存
使用examine(簡(jiǎn)寫x)來查看內(nèi)存地址中的值。語法:
x/
n、f、u是可選的參數(shù)。
(1)n 是一個(gè)正整數(shù),表示顯示內(nèi)存的長(zhǎng)度,也就是說從當(dāng)前地址向后顯示幾個(gè)地址的內(nèi)容。
(2)f 表示顯示的格式,參見上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
(3)u 表示從當(dāng)前地址往后請(qǐng)求的字節(jié)數(shù),如果不指定的話,GDB默認(rèn)是4個(gè)bytes。u參數(shù)可以用下面的字符來代替,b表示單字節(jié),h表示雙字節(jié),w表示四字 節(jié),g表示八字節(jié)。當(dāng)我們指定了字節(jié)長(zhǎng)度后,GDB會(huì)從指內(nèi)存定的內(nèi)存地址開始,讀寫指定字節(jié),并把其當(dāng)作一個(gè)值取出來。
eg:
x/3uh 0x54320 :從內(nèi)存地址0x54320讀取內(nèi)容,h表示以雙字節(jié)為一個(gè)單位,3表示三個(gè)單位,u表示按十六進(jìn)制顯示。
6. 察看寄存器
(1)要查看寄存器的值,很簡(jiǎn)單,可以使用如下命令:
info registers
(2)查看寄存器的情況。(除了浮點(diǎn)寄存器)
info all-registers
(3)查看所有寄存器的情況。(包括浮點(diǎn)寄存器)
info registers
(4)查看所指定的寄存器的情況。
寄存器中放置了程序運(yùn)行時(shí)的數(shù)據(jù),比如程序當(dāng)前運(yùn)行的指令地址(ip),程序的當(dāng)前堆棧地址(sp)等等。你同樣可以使用print命令來訪問寄存器的情況,只需要在寄存器名字前加一個(gè)$符號(hào)就可以了。如:p $eip。
7. display自動(dòng)顯示的變量
(1)格式:display[/i|s] [expression | addr]
eg:
display/i $pc
$pc是GDB的環(huán)境變量,表示著指令的地址,/i則表示輸出格式為機(jī)器指令碼,也就是匯編。于是當(dāng)程序停下后,就會(huì)出現(xiàn)源代碼和機(jī)器指令碼相對(duì)應(yīng)的情形,這是一個(gè)很有意思的功能。
(2)其他
undisplay
delete display
刪除自動(dòng)顯示,dnums意為所設(shè)置好了的自動(dòng)顯式的編號(hào)。如果要同時(shí)刪除幾個(gè),編號(hào)可以用空格分隔,如果要?jiǎng)h除一個(gè)范圍內(nèi)的編號(hào),可以用減號(hào)表示(如:2-5)
disable display
enable display
disable和enalbe不刪除自動(dòng)顯示的設(shè)置,而只是讓其失效和恢復(fù)。
info display
查看display設(shè)置的自動(dòng)顯示的信息。GDB會(huì)打出一張表格,向你報(bào)告當(dāng)然調(diào)試中設(shè)置了多少個(gè)自動(dòng)顯示設(shè)置,其中包括,設(shè)置的編號(hào),表達(dá)式,是否enable。
8. 設(shè)置
(1)set print address
set print address on
打開地址輸出,當(dāng)程序顯示函數(shù)信息時(shí),GDB會(huì)顯出函數(shù)的參數(shù)地址。
(2)set print array
set print array on
打開數(shù)組顯示,打開后當(dāng)數(shù)組顯示時(shí),每個(gè)元素占一行,如果不打開的話,每個(gè)元素則以逗號(hào)分隔。
(3)set print elements
這個(gè)選項(xiàng)主要是設(shè)置數(shù)組的,如果你的數(shù)組太大了,那么就可以指定一個(gè)來指定數(shù)據(jù)顯示的最大長(zhǎng)度,當(dāng)?shù)竭_(dá)這個(gè)長(zhǎng)度時(shí),GDB就不再往下顯示了。如果設(shè)置為0,則表示不限制。
(4)set print null-stop
如果打開了這個(gè)選項(xiàng),那么當(dāng)顯示字符串時(shí),遇到結(jié)束符則停止顯示。這個(gè)選項(xiàng)默認(rèn)為off。
(5)set print pretty on
如果打開printf pretty這個(gè)選項(xiàng),那么當(dāng)GDB顯示結(jié)構(gòu)體時(shí)會(huì)比較漂亮。如:
$1 = {
next = 0x0,
flags = {
sweet = 1,
sour = 1
},
meat = 0x54 "Pork"
}
(6)set print union
設(shè)置顯示結(jié)構(gòu)體時(shí),是否顯式其內(nèi)的聯(lián)合體數(shù)據(jù)。
(7)set print object
在C++中,如果一個(gè)對(duì)象指針指向其派生類,如果打開這個(gè)選項(xiàng),GDB會(huì)自動(dòng)按照虛方法調(diào)用的規(guī)則顯示輸出,如果關(guān)閉這個(gè)選項(xiàng)的話,GDB就不管虛函數(shù)表了。
linux 設(shè)置堆棧大小 為無限制
你好。
執(zhí)行命令ulimit ?-a,查看棧大小的限制。
通過使用 ?ulimit ?-s 數(shù)字 進(jìn)行設(shè)置。
求教關(guān)于linux的堆棧設(shè)置
在/etc/profile 的最后面添加ulimit -s unlimited 保存,source /etc/profile使修改文件生效
linux查看修改線程默認(rèn)棧空間大小 :ulimit -s
1、通過命令 ulimit -s 查看linux的默認(rèn)棧空間大小,默認(rèn)情況下 為10240 即10M
2、通過命令 ulimit -s 設(shè)置大小值 臨時(shí)改變棧空間大小:ulimit -s 102400, 即修改為100M
3、可以在/etc/rc.local 內(nèi) 加入 ulimit -s 102400 則可以開機(jī)就設(shè)置棧空間大小
4、在/etc/security/limits.conf 中也可以改變棧空間大小:
#domain type item value
* soft stack 102400
重新登錄,執(zhí)行ulimit -s 即可看到改為102400 即100M
文章標(biāo)題:linux打堆棧的命令 linux查看堆棧調(diào)用信息
URL分享:http://ef60e0e.cn/article/hisddo.html