轉載:http://blog.csdn.net/mergerly/article/details/41994207html
core dump 通常是在segmentation fault(段錯誤)的狀況下產生的文件,須要經過ulimit來設置纔會獲得的。
調試的話輸入:
gdb filename core
filename就是產生core文件的可執行文件,core就是產生的dump文件
查看棧信息
—————
當程序被停住了,你須要作的第一件事就是查看程序是在哪裏停住的。當你的程序
調用了一個函數,函數的地址,函數參數,函數內的局部變量都會被壓入
「棧」(Stack)中。你能夠用GDB命令來查看當前的棧中的信息。
下面是一些查看函數調用棧信息的GDB命令:
backtrace
bt
打印當前的函數調用棧的全部信息。如:
(gdb) bt
#0 func (n=250) at tst.c:6
#1 0x08048524 in main (argc=1, argv=0xbffff674) at tst.c:30
#2 0x400409ed in __libc_start_main () from /lib/libc.so.6
從上能夠看出函數的調用棧信息:__libc_start_main --> main()--> func()
backtrace
bt
n是一個正整數,表示只打印棧頂上n層的棧信息。
backtrace <-n>
bt <-n>
-n表一個負整數,表示只打印棧底下n層的棧信息。
若是你要查看某一層的信息,你須要在切換當前的棧,通常來講,程序中止時,最頂
層的棧就是當前棧,若是你要查看棧下面層的詳細信息,首先要作的是切換當前棧。
frame
f
n是一個從0開始的整數,是棧中的層編號。好比:frame 0,表示棧頂,frame 1,表示棧的第二層。
up
表示向棧的上面移動n層,能夠不打n,表示向上移動一層。
down
表示向棧的下面移動n層,能夠不打n,表示向下移動一層。
上面的命令,都會打印出移動到的棧層的信息。若是你不想讓其打出信息。你可使用這三個命令:
select-frame 對應於 frame 命令。
up-silently 對應於 up 命令。
down-silently 對應於 down 命令。
查看當前棧層的信息,你能夠用如下GDB命令:
frame 或 f
會打印出這些信息:棧的層編號,當前的函數名,函數參數值,函數所在文件及行號,函數執行到的語句。
info frame
info f
這個命令會打印出更爲詳細的當前棧層的信息,只不過,大多數都是運行時的內內
地址。好比:函數地址,調用函數的地址,被調用函數的地址,目前的函數是由什麼
樣的程序語言寫成的、函數參數地址及值、局部變量的地址等等。如:
(gdb)
info f
Stack level 0, frame at 0xbffff5d4:
eip = 0x804845d in func (tst.c:6); saved eip 0x8048524
called by frame at 0xbffff60c
source language c.
Arglist at 0xbffff5d4, args: n=250
Locals at 0xbffff5d4, Previous frame's sp is 0x0
Saved registers:
ebp at 0xbffff5d4, eip at 0xbffff5d8
info args
打印出當前函數的參數名及其值。
info locals
打印出當前函數中全部局部變量及其值。
info catch
打印出當前的函數中的異常處理信息。
查看源程序
—————
1、顯示源代碼
GDB 能夠打印出所調試程序的源代碼,固然,在程序編譯時必定要加上-g的參數,把
源程序信息編譯到執行文件中。否則就看不到源程序了。當程序停下來之後,
GDB會報告程序停在了那個文件的第幾行上。你能夠用list命令來打印程序的源代
碼。仍是來看一看查看源代碼的GDB命令吧。
list
顯示程序第linenum行的周圍的源程序。
list
顯示函數名爲function的函數的源程序。
list
顯示當前行後面的源程序。
list -
顯示當前行前面的源程序。
通常是打印當前行的上5行和下5行,若是顯示函數是是上2行下8行,默認是10行,當
然,你也能夠定製顯示的範圍,使用下面命令能夠設置一次顯示源程序的行數。
set listsize
設置一次顯示源代碼的行數。
show listsize
查看當前listsize的設置。
list命令還有下面的用法:
list ,
顯示從first行到last行之間的源代碼。
list ,
顯示從當前行到last行之間的源代碼。
list +
日後顯示源代碼。
通常來講在list後面能夠跟如下這們的參數:
行號。
<+offset> 當前行號的正偏移量。
<-offset> 當前行號的負偏移量。
哪一個文件的哪一行。
函數名。
哪一個文件中的哪一個函數。
<*address> 程序運行時的語句在內存中的地址。
2、搜索源代碼
不只如此,GDB還提供了源代碼搜索的命令:
forward-search
search
向前面搜索。
reverse-search
所有搜索。
其中,就是正則表達式,也主一個字符串的匹配模式,關於正則表達式,我就不在這裏講了,還請各位查看相關資料。
3、指定源文件的路徑
某些時候,用-g編譯事後的執行程序中只是包括了源文件的名字,沒有路徑名。GDB提供了可讓你指定源文件的路徑的命令,以便GDB進行搜索。
directory
dir
加一個源文件路徑到當前路徑的前面。若是你要指定多個路徑,UNIX下你可使用「:」,Windows下你可使用「;」。
directory
清除全部的自定義的源文件搜索路徑信息。
show directories
顯示定義了的源文件搜索路徑。
4、源代碼的內存
你可使用info line命令來查看源代碼在內存中的地址。info line後面能夠跟
「行號」,「函數名」,「文件名:行號」,「文件名:函數名」,這個命令會打印出所指定的
源碼在運行時的內存地址,如:
(gdb) info line tst.c:func
Line 5 of "tst.c" starts at address 0x8048456 and ends at 0x804845d.
還有一個命令(disassemble)你能夠查看源程序的當前執行時的機器碼,這個命令
會把目前內存中的指令dump出來。以下面的示例表示查看函數func的彙編代碼。
(gdb) disassemble func
Dump of assembler code for function func:
0x8048450 : push %ebp
0x8048451 : mov %esp,%ebp
0x8048453 : sub $0x18,%esp
0x8048456 : movl $0x0,0xfffffffc(%ebp)
0x804845d : movl $0x1,0xfffffff8(%ebp)
0x8048464 : mov 0xfffffff8(%ebp),%eax
0x8048467 : cmp 0x8(%ebp),%eax
0x804846a : jle 0x8048470
0x804846c : jmp 0x8048480
0x804846e : mov %esi,%esi
0x8048470 : mov 0xfffffff8(%ebp),%eax
0x8048473 : add %eax,0xfffffffc(%ebp)
0x8048476 : incl 0xfffffff8(%ebp)
0x8048479 : jmp 0x8048464
0x804847b : nop
0x804847c : lea 0x0(%esi,1),%esi
0x8048480 : mov 0xfffffffc(%ebp),%edx
0x8048483 : mov %edx,%eax
0x8048485 : jmp 0x8048487
0x8048487 : mov %ebp,%esp
0x8048489 : pop %ebp
0x804848a : ret
End of assembler dump.
查看運行時數據
———————
在你調試程序時,當程序被停住時,你可使用print命令(簡寫命令爲p),或是同義命令inspect來查看當前程序的運行數據。print命令的格式是:
print
print /
是表達式,是你所調試的程序的語言的表達式(GDB能夠調試多種編程語言),是輸出的格式,好比,若是要把表達式按16進制的格式輸出,那麼就是/x。
1、表達式
print和許多GDB的命令同樣,能夠接受一個表達式,GDB會根據當前的程序運行的數
據來計算這個表達式,既然是表達式,那麼就能夠是當前程序運行中的const常量、
變量、函數等內容。惋惜的是GDB不能使用你在程序中所定義的宏。
表達式的語法應該是當前所調試的語言的語法,因爲C/C++是一種大衆型的語言,所
以,本文中的例子都是關於C/C++的。(而關於用GDB調試其它語言的章節,我將在後
面介紹)
在表達式中,有幾種GDB所支持的操做符,它們能夠用在任何一種語言中。
@
是一個和數組有關的操做符,在後面會有更詳細的說明。
::
指定一個在文件或是一個函數中的變量。
{}
表示一個指向內存地址的類型爲type的一個對象。
2、程序變量
在GDB中,你能夠隨時查看如下三種變量的值:
一、全局變量(全部文件可見的)
二、靜態全局變量(當前文件可見的)
三、局部變量(當前Scope可見的)
若是你的局部變量和全局變量發生衝突(也就是重名),通常狀況下是局部變量會隱
藏全局變量,也就是說,若是一個全局變量和一個函數中的局部變量同名時,若是當
前中止點在函數中,用print顯示出的變量的值會是函數中的局部變量的值。若是
此時你想查看全局變量的值時,你可使用「::」操做符:
file::variable
function::variable
能夠經過這種形式指定你所想查看的變量,是哪一個文件中的或是哪一個函數中的。例如,查看文件f2.c中的全局變量x的值:
gdb) p 'f2.c'::x
固然,「::」操做符會和C++中的發生衝突,GDB能自動識別「::」是否C++的操做符,因此你沒必要擔憂在調試C++程序時會出現異常。
另外,須要注意的是,若是你的程序編譯時開啓了優化選項,那麼在用GDB調試被優
化過的程序時,可能會發生某些變量不能訪問,或是取值錯誤碼的狀況。這個是很
正常的,由於優化程序會刪改你的程序,整理你程序的語句順序,剔除一些無心義的
變量等,因此在GDB調試這種程序時,運行時的指令和你所編寫指令就有不同,也
就會出現你所想象不到的結果。對付這種狀況時,須要在編譯程序時關閉編譯優化。
通常來講,幾乎全部的編譯器都支持編譯優化的開關,例如,GNU 的C/C++編譯器
GCC,你可使用「-gstabs」選項來解決這個問題。關於編譯器的參數,還請查看編
譯器的使用說明文檔。
3、數組
有時候,你須要查看一段連續的內存空間的值。好比數組的一段,或是動態分配的
數據的大小。你可使用GDB的「@」操做符,「@」的左邊是第一個內存的地址的
值,「@」的右邊則你你想查看內存的長度。例如,你的程序中有這樣的語句:
int *array = (int *) malloc (len * sizeof (int));
因而,在GDB調試過程當中,你能夠以以下命令顯示出這個動態數組的取值:
p *array@len
@的左邊是數組的首地址的值,也就是變量array所指向的內容,右邊則是數據的長度,其保存在變量len中,其輸出結果,大約是下面這個樣子的:
(gdb) p *array@len
$1 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,34, 36, 38, 40}
若是是靜態數組的話,能夠直接用print數組名,就能夠顯示數組中全部數據的內容了。
4、輸出格式
通常來講,GDB會根據變量的類型輸出變量的值。但你也能夠自定義GDB的輸出的格
式。例如,你想輸出一個整數的十六進制,或是二進制來查看這個整型變量的中的
位的狀況。要作到這樣,你可使用GDB的數據顯示格式:
x 按十六進制格式顯示變量。
d 按十進制格式顯示變量。
u 按十六進制格式顯示無符號整型。
o 按八進制格式顯示變量。
t 按二進制格式顯示變量。
a 按十六進制格式顯示變量。
c 按字符格式顯示變量。
f 按浮點數格式顯示變量。
(gdb) p i
$21 = 101
(gdb) p/a i
$22 = 0x65
(gdb) p/c i
$23 = 101 'e'
(gdb) p/f i
$24 = 1.41531145e-43
(gdb) p/x i
$25 = 0x65
(gdb) p/t i
$26 = 1100101
5、查看內存
你可使用examine命令(簡寫是x)來查看內存地址中的值。x命令的語法以下所示:
x/
n、f、u是可選的參數。
n 是一個正整數,表示顯示內存的長度,也就是說從當前地址向後顯示幾個地址的內容。
f 表示顯示的格式,參見上面。若是地址所指的是字符串,那麼格式能夠是s,若是地十是指令地址,那麼格式能夠是i。
u 表示從當前地址日後請求的字節數,若是不指定的話,GDB默認是4個bytes。
u參數能夠用下面的字符來代替,b表示單字節,h表示雙字節,w表示四字節,g表示八字節。
當咱們指定了字節長度後,GDB會從指內存定的內存地址開始,讀寫指定字節,並把其看成一個值取出來。
表示一個內存地址。
n/f/u三個參數能夠一塊兒使用。例如:
命令:x/3uh 0x54320表示,從內存地址0x54320讀取內容,h表示以雙字節爲一個單位,3表示三個單位,u表示按十六進制顯示。
6、自動顯示
你能夠設置一些自動顯示的變量,當程序停住時,或是在你單步跟蹤時,這些變量會自動顯示。相關的GDB命令是display。
display
display/
display/
expr是一個表達式,fmt表示顯示的格式,addr表示內存地址,當你用display設定好了一個或多個表達式後,只要你的程序被停下來,GDB會自動顯示你所設置的這些表達式的值。
格式i和s一樣被display支持,一個很是有用的命令是:
display/i $pc
$pc是GDB的環境變量,表示着指令的地址,/i則表示輸出格式爲機器指令碼,也就是彙編。因而當程序停下後,就會出現源代碼和機器指令碼相對應的情形,這是一個頗有意思的功能。
下面是一些和display相關的GDB命令:
undisplay
delete display
刪除自動顯示,dnums意爲所設置好了的自動顯式的編號。若是要同時刪除幾個,編號能夠用空格分隔,若是要刪除一個範圍內的編號,能夠用減號表示(如:2-5)
disable display
enable display
disable和enalbe不刪除自動顯示的設置,而只是讓其失效和恢復。
info display
查看display設置的自動顯示的信息。GDB會打出一張表格,向你報告固然調試中設置了多少個自動顯示設置,其中包括,設置的編號,表達式,是否enable。
7、設置顯示選項
GDB中關於顯示的選項比較多,這裏我只例舉大多數經常使用的選項。
set print address
set print address on
打開地址輸出,當程序顯示函數信息時,GDB會顯出函數的參數地址。系統默認爲打開的,如:
(gdb) f
#0 set_quotes (lq=0x34c78 "<<",rq=0x34c88 ">>")
at input.c:530
530 if (lquote != def_lquote)
set print address off
關閉函數的參數地址顯示,如:
(gdb) set print addr off
(gdb) f
#0 set_quotes (lq="<<",rq=">>") at input.c:530
530 if (lquote != def_lquote)
show print address
查看當前地址顯示選項是否打開。
set print array
set print array on
打開數組顯示,打開後當數組顯示時,每一個元素佔一行,若是不打開的話,每一個元素則以逗號分隔。這個選項默認是關閉的。與之相關的兩個命令以下,我就再也不多說了。
set print array off
show print array
set print elements
這個選項主要是設置數組的,若是你的數組太大了,那麼就能夠指定一個來指定數據顯示的最大長度,當到達這個長度時,GDB就再也不往下顯示了。若是設置爲0,則表示不限制。
show print elements
查看print elements的選項信息。
set print null-stop
若是打開了這個選項,那麼當顯示字符串時,遇到結束符則中止顯示。這個選項默認爲off。
set print pretty on
若是打開printf pretty這個選項,那麼當GDB顯示結構體時會比較漂亮。如:
$1 = {
next = 0x0,
flags = {
sweet = 1,
sour = 1
},
meat = 0x54 "Pork"
}
set print pretty off
關閉printf pretty這個選項,GDB顯示結構體時會以下顯示:
$1 = {next = 0x0, flags = {sweet = 1, sour = 1}, meat = 0x54"Pork"}
show print pretty
查看GDB是如何顯示結構體的。
set print sevenbit-strings
設置字符顯示,是否按「\nnn」的格式顯示,若是打開,則字符串或字符數據按\nnn顯示,如「\065」。
show print sevenbit-strings
查看字符顯示開關是否打開。
set print union
設置顯示結構體時,是否顯式其內的聯合體數據。例若有如下數據結構:
typedef enum {Tree, Bug} Species;
typedef enum {Big_tree, Acorn, Seedling} Tree_forms;
typedef enum {Caterpillar, Cocoon, Butterfly}
Bug_forms;
struct thing {
Species it;
union {
Tree_forms tree;
Bug_forms bug;
} form;
};
struct thing foo = {Tree, {Acorn}};
當打開這個開關時,執行 p foo 命令後,會以下顯示:
$1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
當關閉這個開關時,執行 p foo 命令後,會以下顯示:
$1 = {it = Tree, form = {...}}
show print union
查看聯合體數據的顯示方式
set print object
在C++中,若是一個對象指針指向其派生類,若是打開這個選項,GDB會自動按照虛方法調用的規則顯示輸出,若是關閉這個選項的話,GDB就無論虛函數表了。這個選項默認是off。
show print object
查看對象選項的設置。
set print static-members
這個選項表示,當顯示一個C++對象中的內容是,是否顯示其中的靜態數據成員。默認是on。
show print static-members
查看靜態數據成員選項設置。
set print vtbl
當此選項打開時,GDB將用比較規整的格式來顯示虛函數表時。其默認是關閉的。
show print vtbl
查看虛函數顯示格式的選項。
8、歷史記錄
當你用GDB的print查看程序運行時的數據時,你每個print都會被GDB記錄下來。
GDB會以$1, $2, $3 .....這樣的方式爲你每個print命令編上號。因而,你能夠
使用這個編號訪問之前的表達式,如$1。這個功能所帶來的好處是,若是你先前輸
入了一個比較長的表達式,若是你還想查看這個表達式的值,你可使用歷史記錄
來訪問,省去了重複輸入。
9、GDB環境變量
你能夠在GDB的調試環境中定義本身的變量,用來保存一些調試程序中的運行數據。要定義一個GDB的變量很簡單隻需。使用GDB的set命令。GDB的環境變量和UNIX同樣,也是以$起頭。如:
set $foo = *object_ptr
使用環境變量時,GDB會在你第一次使用時建立這個變量,而在之後的使用中,則直接對其賦值。環境變量沒有類型,你能夠給環境變量定義任一的類型。包括結構體和數組。
show convenience
該命令查看當前所設置的全部的環境變量。
這是一個比較強大的功能,環境變量和程序變量的交互使用,將使得程序調試更爲靈活便捷。例如:
set $i = 0
print bar[$i++]->contents
因而,當你就沒必要,print bar[0]->contents, printbar[1]->contents地輸入命令了。輸入這樣的命令後,只用敲回車,重複執行上一條語句,環境變量會自動累加,從而完成逐個輸出的功能。
10、查看寄存器
要查看寄存器的值,很簡單,可使用以下命令:
info registers
查看寄存器的狀況。(除了浮點寄存器)
info all-registers
查看全部寄存器的狀況。(包括浮點寄存器)
info registers
查看所指定的寄存器的狀況。
寄存器中放置了程序運行時的數據,好比程序當前運行的指令地址(ip),程序的當
前堆棧地址(sp)等等。你一樣可使用print命令來訪問寄存器的狀況,只須要在
寄存器名字前加一個$符號就能夠了。如:p $eip。
改變程序的執行
———————
一旦使用GDB掛上被調試程序,當程序運行起來後,你能夠根據本身的調試思路來動
態地在GDB中更改當前被調試程序的運行線路或是其變量的值,這個強大的功能能
夠讓你更好的調試你的程序,好比,你能夠在程序的一次運行中走遍程序的全部分
支。
1、修改變量值
修改被調試程序運行時的變量值,在GDB中很容易實現,使用GDB的print命令便可完成。如:
(gdb) print x=4
x=4這個表達式是C/C++的語法,意爲把變量x的值修改成4,若是你當前調試的語言是Pascal,那麼你可使用Pascal的語法:x:=4。
在某些時候,頗有可能你的變量和GDB中的參數衝突,如:
(gdb) whatis width
type = double
(gdb) p width
$4 = 13
(gdb) set width=47
Invalid syntax in expression.
由於,set width是GDB的命令,因此,出現了「Invalid syntax inexpression」的設置錯誤,此時,你可使用setvar命令來告訴GDB,width不是你GDB的參數,而是程序的變量名,如:
(gdb) set var width=47
另外,還可能有些狀況,GDB並不報告這種錯誤,因此保險起見,在你改變程序變量取值時,最好都使用setvar格式的GDB命令。
2、跳轉執行
通常來講,被調試程序會按照程序代碼的運行順序依次執行。GDB提供了亂序執行的功能,也就是說,GDB能夠修改程序的執行順序,可讓程序執行隨意跳躍。這個功能能夠由GDB的jump命令來完:
jump
指定下一條語句的運行點。能夠是文件的行號,能夠是file:line格式,能夠是+num這種偏移量格式。表式着下一條運行語句從哪裏開始。
jump
這裏的
是代碼行的內存地址。
注意,jump命令不會改變當前的程序棧中的內容,因此,當你從一個函數跳到另外一個
函數時,當函數運行完返回時進行彈棧操做時必然會發生錯誤,可能結果仍是很是
奇怪的,甚至於產生程序Core Dump。因此最好是同一個函數中進行跳轉。
熟悉彙編的人都知道,程序運行時,有一個寄存器用於保存當前代碼所在的內存地
址。因此,jump命令也就是改變了這個寄存器中的值。因而,你可使用「set
$pc」來更改跳轉執行的地址。如:
set $pc = 0x485
3、產生信號量
使用singal命令,能夠產生一個信號量給被調試的程序。如:中斷信號Ctrl+C。這
很是方便於程序的調試,能夠在程序運行的任意位置設置斷點,並在該斷點用GDB產
生一個信號量,這種精確地在某處產生信號很是有利程序的調試。
語法是:signal ,UNIX的系統信號量一般從1到15。因此取值也在這個範圍。
single命令和shell的kill命令不一樣,系統的kill命令發信號給被調試程序時,是由
GDB截獲的,而single命令所發出一信號則是直接發給被調試程序的。
4、強制函數返回
若是你的調試斷點在某個函數中,並還有語句沒有執行完。你可使用return命令強制函數忽略尚未執行的語句並返回。
return
return
使用return命令取消當前函數的執行,並當即返回,若是指定了,那麼該表達式的值會被認做函數的返回值。
5、強制調用函數
call
表達式中能夠一是函數,以此達到強制調用函數的目的。並顯示函數的返回值,如
果函數返回值是void,那麼就不顯示。
另外一個類似的命令也能夠完成這一功能——print,print後面能夠跟表達式,因此也
能夠用他來調用函數,print和call的不一樣是,若是函數返回void,call則不顯
示,print則顯示函數返回值,並把該值存入歷史數據中。
在不一樣語言中使用GDB
——————————
GDB支持下列語言:C, C++, Fortran, PASCAL, Java, Chill, assembly, 和
Modula-2。通常說來,GDB會根據你所調試的程序來肯定固然的調試語言,好比:發
現文件名後綴爲「.c」的,GDB會認爲是C程序。文件名後綴爲 「.C, .cc, .cp,
.cpp, .cxx, .c++」的,GDB會認爲是C++程序。然後綴是「.f, .F」的,GDB會認爲是
Fortran程序,還有,後綴爲若是是「.s, .S」的會認爲是彙編語言。
也就是說,GDB會根據你所調試的程序的語言,來設置本身的語言環境,並讓GDB的命
令跟着語言環境的改變而改變。好比一些GDB命令須要用到表達式或變量時,這些
表達式或變量的語法,徹底是根據當前的語言環境而改變的。例如C/C++中對指針
的語法是*p,而在Modula-2中則是p^。而且,若是你當前的程序是由幾種不一樣語言
一同編譯成的,那到在調試過程當中,GDB也能根據不一樣的語言自動地切換語言環境。
這種跟着語言環境而改變的功能,真是體貼開發人員的一種設計。
下面是幾個相關於GDB語言環境的命令:
show language
查看當前的語言環境。若是GDB不能識爲你所調試的編程語言,那麼,C語言被認爲是默認的環境。
info frame
查看當前函數的程序語言。
info source
查看當前文件的程序語言。
若是GDB沒有檢測出當前的程序語言,那麼你也能夠手動設置當前的程序語言。使用set language命令便可作到。
當set language命令後什麼也不跟的話,你能夠查看GDB所支持的語言種類:
(gdb) set language
The currently understood settings are:
local or auto Automatic setting based on source file
c Use the C language
c++ Use the C++ language
asm Use the Asm language
chill Use the Chill language
fortran Use the Fortran language
java Use the Java language
modula-2 Use the Modula-2 language
pascal Use the Pascal language
scheme Use the Scheme language
因而你能夠在set language後跟上被列出來的程序語言名,來設置當前的語言環境。
目前您還沒有登陸,請 登陸 或 註冊 後進行評論
Linux中gdb 查看core堆棧信息
- suxinpingtao51
- 2013年09月26日 23:56
- 53482
core dump 通常是在segmentation fault(段錯誤)的狀況下產生的文件,須要經過ulimit來設置纔會獲得的。 調試的話輸入: gdb filename core f...
用gdb分析core文件及常見gdb命令操做示例
- zhouzxi
- 2015年10月08日 19:09
- 6421
本文以一個實際的程序爲例,介紹了用gdb分析core文件的方法和步驟,同時演示了常見gdb命令的操做方法。...
-
-
非98五、211畢業,如何進入大公司拿到高薪職位?
立刻就到2018跳槽季,應聘BAT等知名大公司卻總被學歷拒之門外…有什麼比學歷含金量更高的敲門磚嗎?
linux下用core和gdb查詢出現"段錯誤"的地方
- chinawangfei
- 2015年10月23日 16:49
- 1612
有些時候,在執行一段C代碼的時候,因爲對一個非法內存進行了操做,在程序運行的過程當中,出現了"段錯誤"。遇到這種問題是很是無語的,只是提示了"段錯誤",其餘什麼都沒有。若是咱們一味地去看代碼查找問題,那...
gdb調試core文件
- hzhsan
- 2014年07月28日 12:02
- 9935
編寫服務器端程序,很容易遇到Crash問題,比較幸運的是Linux提供了core file,保留了Crash的現場。有時候,根據當前的調用棧,而且打印出當前棧的變量就能夠分析出crash的緣由,可是,...
LINUX core dump詳解 & GDB調試
- AriesSurfer
- 2012年06月09日 22:04
- 10827
1. 前言: 有的程序能夠經過編譯, 但在運行時會出現Segment fault(段錯誤). 這一般都是指針錯誤引發的. 但這不像編譯錯誤同樣會提示到文件->行, 而是沒有任何信息, 使得咱們的調...
GDB查看棧信息
- unix21
- 2012年12月29日 12:53
- 10469
棧:是程序存放數據內存區域之一,特色是LIFO(後進先出)。 PUSH:入棧 POP:出戰 使用場景: 1.保存動態分配的自動變量使用棧 2.函數調用時,用棧傳遞函數參數,半寸返回地...
gdb 查看堆棧信息、加載core文件、鏈接到其它進程
- zhangzheng0413
- 2012年05月15日 16:41
- 14330
當程序被停住了,你須要作的第一件事就是查看程序是在哪裏停住的。當你的程序調用了一個函數,函數的地址,函數參數,函數內的局部變量都會被壓入「棧」(Stack)中。你能夠用GDB命令來查看當前的棧中的信息...
Linux中gdb 查看core堆棧信息 gdb core 調試
- yonggeno1
- 2016年03月14日 17:24
- 323
gdb 調試以及生成的core dump 文件調試
gdb經常使用調試命令以及多線程堆棧的查看
- NK_test
- 2016年03月03日 23:32
- 16716
GDB是GNU開源組織發佈的一個強大的UNIX下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像VC、BCB等IDE的調試,但若是你是在UNIX平臺下作軟件,你會發現GDB這個調試工具備比VC...
Linux中gdb 查看core堆棧信息
- Angel69Devil
- 2016年10月12日 11:53
- 589
core dump 通常是在segmentation fault(段錯誤)的狀況下產生的文件,須要經過ulimit來設置纔會獲得的。 調試的話輸入: gdb filename core f...
linux core文件GDB調試方法
- wscdylzjy
- 2015年06月29日 16:30
- 979
1、如何使用core文件 1. 使用core文件 在core文件所在目錄下鍵入: gdb -c coreXXX 它會啓動GNU的調試器,來調試core文件,而且會顯示生...
Linux中gdb查看core堆棧信息
- 2013年04月15日 08:17
- 11.45MB
- 下載
![](http://static.javashuo.com/static/loading.gif)
linux下打開core功能,以便於經過gdb查看出錯堆棧信息
- prettyshuang
- 2016年04月07日 11:08
- 639
1. 終端下執行ulimit -c 查看core文件大小限制 ,通常操做系統默認爲0。 2. 執行ulimit -c 1024把core文件大小限制在1k, 也能夠直接執行ulimit...
使用 GDB 恢復堆棧信息
- swartz_lubel
- 2017年09月13日 23:08
- 318
用 C/C++ 編寫的程序, 若是遇到 Segmentation Fault 則能夠經過生成 coredump 來進行調試, 根據記錄的信息定位到出錯代碼行. 但不少時候可能用 gdb 打開 core...
arm-linux-gdb 環境搭建及調試core文件
- yuanbinquan
- 2015年06月18日 15:34
- 3261
系統環境: host:ubuntu12.04 gcc:gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) target:hisi3520d開發...
Linux 如何使用gdb 查看core堆棧信息
- xiuzhentianting
- 2015年09月11日 10:29
- 619
gdb ExeName (gdb)core core.xx (gdb)bt core dump 通常是在segmentation fault(段錯誤)的狀況下產生的文件,須要經過ulim...
gdb 打印全部線程堆棧
- wh8_2011
- 2017年01月05日 15:58
- 4684
gdb 打印全部線程堆棧 在gdb中使用 thread apply all bt 查看所用線程堆棧信息
c++ gdb core dump 入門
- caoshuming_500
- 2015年03月05日 14:19
- 1207
1. core dump 的定義 程序員寫程序時最擔憂的即便程序莫名其妙的down掉;這樣的狀況每每很差查;這時system 會在程序down時把程序的內存/寄存器狀態/堆棧指針/內存管理信息 等信息...
無符號和棧破壞狀況下coredump的分析方法
- qazxlf
- 2015年12月23日 11:23
- 3608
原文:http://zhangzhibiao02005.blog.163.com/blog/static/37367820201482044137298/ 無符號和棧破壞狀況下coredump的...
解決gdb 調試 core 文件函數名顯示爲問號的問題
- u011348999
- 2016年03月09日 10:28
- 4034
問題描述:已經在編譯選項中加入了-g,可是查看core文件時,仍是一堆問號,使用的命令爲:gdb -c core...
-
-
mergerly
- 原創
- 72
- 粉絲
- 307
- 喜歡
- 94
- 評論
- 190
![](http://static.javashuo.com/static/loading.gif)
他的最新文章
更多文章文章分類
- BHO
6篇
- GUI
25篇
- python
5篇
- WMI
7篇
- 工具
22篇
- 服務器
50篇
- 系統
13篇
- 自動更新
5篇
- 軟件工程
19篇
- 逆向調試
34篇
- 驅動
7篇
- 黑色代碼
16篇
- 基礎代碼
25篇
- WEB技術
31篇
- P2P
12篇
- Linux
111篇
- 瀏覽器
6篇
- 流媒體
6篇
- android
28篇
- cocos2d-x
26篇
- IOS
12篇
- 源碼
10篇
- java
2篇
- 大數據
72篇
- docker
12篇
- 安全
31篇
- 直播
1篇
- 策劃
2篇
- 區塊鏈
6篇
展開
文章存檔
- 2018年2月
3篇
- 2018年1月
13篇
- 2017年12月
5篇
- 2017年11月
12篇
- 2017年9月
18篇
- 2017年8月
15篇
- 2017年7月
7篇
- 2017年6月
3篇
- 2017年5月
18篇
- 2017年4月
1篇
- 2017年3月
20篇
- 2017年2月
4篇
- 2017年1月
13篇
- 2016年12月
7篇
- 2016年11月
12篇
- 2016年10月
8篇
- 2016年8月
5篇
- 2016年7月
1篇
- 2016年6月
4篇
- 2016年5月
7篇
- 2016年4月
5篇
- 2016年3月
3篇
- 2016年2月
8篇
- 2016年1月
3篇
- 2015年12月
1篇
- 2015年11月
4篇
- 2015年10月
4篇
- 2015年9月
1篇
- 2015年8月
3篇
- 2015年7月
8篇
- 2015年6月
5篇
- 2015年5月
3篇
- 2015年4月
1篇
- 2015年3月
3篇
- 2015年2月
3篇
- 2015年1月
4篇
- 2014年12月
7篇
- 2014年11月
21篇
- 2014年10月
3篇
- 2014年9月
11篇
- 2014年8月
6篇
- 2014年7月
1篇
- 2014年6月
2篇
- 2014年5月
13篇
- 2014年4月
8篇
- 2014年3月
11篇
- 2014年2月
6篇
- 2014年1月
12篇
- 2013年12月
26篇
- 2013年11月
7篇
- 2013年10月
16篇
- 2013年9月
5篇
- 2013年8月
13篇
- 2013年6月
1篇
- 2013年5月
2篇
- 2013年4月
13篇
- 2013年3月
6篇
- 2013年2月
4篇
- 2013年1月
8篇
- 2012年12月
11篇
- 2012年11月
4篇
- 2012年10月
2篇
- 2012年9月
9篇
- 2012年5月
1篇
- 2012年4月
1篇
- 2012年3月
1篇
- 2012年1月
3篇
- 2011年12月
2篇
- 2011年9月
5篇
- 2011年8月
4篇
- 2011年7月
3篇
- 2011年5月
1篇
- 2011年4月
1篇
- 2011年3月
1篇
- 2011年1月
6篇
- 2010年12月
1篇
- 2010年9月
1篇
- 2010年8月
1篇
- 2010年5月
3篇
- 2010年4月
6篇
- 2009年12月
2篇
- 2009年11月
5篇
- 2009年10月
2篇
- 2009年9月
6篇
- 2009年8月
1篇
- 2009年6月
2篇
- 2009年5月
3篇
- 2009年4月
7篇
- 2009年3月
6篇
- 2009年2月
12篇
- 2009年1月
1篇
- 2008年12月
3篇
- 2008年11月
12篇
- 2008年9月
15篇
- 2008年8月
5篇
展開
他的熱門文章
- 關於網狐棋牌6603源碼的整理、編譯和搭建
49897
- Outlook 2016 pst/ost郵件數據文件遷移實現
45947
- P2P中DHT網絡介紹
44576
- 跟我一塊兒學習VIM - vim插件合集
35471
- 在lua環境中使用protobuf
30532