璋冭瘯妯″紡
杞偍鏂囦歡璋冭瘯
鐬棿闈欐佸垎鏋愶紝榪涚▼姝葷姸鎬併?br/>
gdb –core=file
浜や簰璋冭瘯
璋冭瘯鏂拌繘紼?br/>
gdb exe
gdb –args exe [args]
璋冭瘯宸茬粡榪愯鐨勮繘紼?br/> gdb –pid= 榪涚▼鍙?/p>
鍐呮牳璋冭瘯
gdb exe
.
gdb –args exe [args]
.
gdb
file exe
run [args]
.
gdb –args gcc a.c -o a
show args
set args 澶氭榪愯璁劇疆鍛戒護琛屽弬鏁?/p>
path directory
.
show paths
.
show environment [varname]
.
set environment varname[=value] 娓呴櫎鎴栬呰緗幆澧冨彉閲?/p>
緇ф壙榪涘叆gdb宸ヤ綔鐩綍
鏀瑰彉宸ヤ綔鐩綍
cd dirctory
鏄劇ず璺緞
pwd
info terminal
run > a.txt
tty /dev/ttyb
榪滅▼璋冭瘯鍙敤榪欎簺杈呭姪銆?/p>
inferior gdb緇存姢鐨勪竴緋誨垪瀵硅薄錛屾瘡涓猧nf瀵瑰簲涓涓皟璇曠洰鏍囪繘紼嬨?/p>
info inferior 鏄劇ず涓嬪眰淇℃伅
NULL 紼嬪簭娌℃湁璺戞垨鑰呭凡緇忕粓姝?br/>
clone-inferior -copies 2 澶嶅埗褰撳墠涓嬪眰2浠?
(gdb) info inferiors
Num Description Executable
* 1 process 10087 /home/gao/code/a
(gdb) clone-inferior -copies 2
Added inferior 2.
Added inferior 3.
(gdb) info inferiors
Num Description Executable
3紼嬪簭娌℃湁璺戞垨鑰呭凡緇忕粓姝? /home/gao/code/a
2/home/gao/code/a
* 1 process 10087 /home/gao/code/a
(gdb)
鍒囨崲涓嬬▼
inferior 2 鍒囨崲2榪欎釜涓嬬▼銆?br/> 榪涚▼鍙鋒槸0錛屾病寮濮嬭繍琛屻?br/> run 榪愯璧鋒潵銆?/p>
.
澧炲姞涓涓繍琛屼笅灞?/p>
add-inferior -exec executeable 澧炲姞涓涓繍琛屼笅灞?br/> 姣斿璇磋皟璇曚竴涓湇鍔$紼嬪簭錛屼竴涓鎴風紼嬪簭銆?/p>
remove-inferior n 鍒犳帀涓涓笅灞?br/>
detach inferior 緇х畫榪愯 quit
kill inferior 璋冭瘯榪涚▼閫浜嗭紝浣嗘槸inferior綰綍榪樺湪銆?/p>
(gdb) remove-
remove-inferiors remove-symbol-file
(gdb) remove-
remove-inferiors remove-symbol-file
(gdb) remove-
file a.exe 鍙嚜琛屾枃浠跺拰絎﹀彿鏂囦歡鏄竴涓枃浠?/p>
鍙嚜琛屾枃浠跺拰絎﹀彿鏂囦歡鍒嗗紑
exec-file 鎸囧畾鐩爣鏂囦歡
.
symbol-file 鎸囧畾絎﹀彿鏂囦歡
run 寮濮嬭繍琛?
鍙互鏀寔 run > >> < 閲嶅畾鍚?
set args 娓呯悊鍛戒護琛屽弬鏁?/p>
gdb –pid= pid
attach pid
detach pid 鍒嗙榪涚▼緇х畫榪愯
.
quit 榪涚▼閫鍑?/p>
.
q
ctrl
+D
鏂偣
break 鏅?
tbreak 涓嬈℃?
rbreak 姝e垯琛ㄨ揪寮忎竴鎵規柇鐐?
linespec
鏍囧彿
explicit
-line number
瀹炶返
file banner
b main 涓柇鍦╩ain鍑芥暟
info funciton useage 鏄劇ずuseage鍑芥暟鍦板潃
info *0x88888e4 鐩存帴鍐欏湴鍧璁懼畾鏂偣
info b 鏄劇ず鎵鏈夋柇鐐?
list usage 鏄劇ずuseage鍑芥暟
b line.c:11
b +2 褰撳墠鏄劇ず鍒?4琛岋紜2琛屾墍浠ヨ瀹氬湪17琛?/p>
铏氭嫙鏈鴻瀹氱‖浠舵柇鐐逛細澶辮觸.
(gdb)hbreak hd_ioctl
(gdb) info b
鐗╃悊鏈哄彲浠ヨ瀹?
(gdb) hbreak v
Hardware assisted breakpoint 2 at 0x40053a: v. (2 locations)
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y
breakpoint already hit 1 time
1.1 y 0x000000000040054f in main at a.c:10 inf 1
1.2 y 0x000000000040054f in main at a.c:10 inf 2
2 hw breakpoint keep y
2.1 y 0x000000000040053a in v at a.c:4 inf 1
2.2 y 0x000000000040053a in v at a.c:4 inf 2
(gdb)
info b 鏄劇ず鏂偣
delete 1 鍒犻櫎
disable 1
enable 1
delete 鍒犻櫎鎵鏈夌殑鏂偣
clear sum 鍒犻櫎sum鍑芥暟鍏ュ彛鐨勬墍鏈夋柇鐐?/p>
watchpoint 鐩戣涓涓〃杈懼紡錛屽煎彉鍖栦腑鏂?/p>
watch a錛奲錛媍錛廳
watch *( int * )
watch fd 鐩戞帶灞閮ㄥ彉閲廸d
c 緇х畫榪愯
info b //
娉ㄦ剰錛寈86紜歡璋冭瘯錛屽啓鎿嶄綔錛屾墽琛岃繃榪欎竴琛岋紝gdb鏄劇ず涓嬩竴琛岋紝瑕佺湅涓婁竴琛屻俬w watchpoint錛屽湪x86騫沖彴wachtpoint鍩轟簬紜歡瀹炵幇錛屽叾浠栧鉤鍙板彲鑳芥槸鍩轟簬杞歡瀹炵幇銆?vc6綰蔣浠舵墽琛岋紝鎵ц鐩爣閫熷害浣庛?br/>
鎵ц浣嶇疆瓚呰繃褰撳墠鍖哄煙錛屾棤鏁堢洃瑙嗙偣浼氳鍒犻櫎銆?/p>
璁塊棶鐩戣鐐?br/>
rwatch 璇誨仠涓嬫潵銆?
awatch 璇繪垨鍐欏仠涓嬫潵銆?awatch fd
watch -l
b hd_ioctl thread 1
info threads 甯︼紛 褰撳墠綰跨▼
綣佸繖鍑芥暟瑙e喅鏂規
b hd_ioctl thread 1 if fd > 0
褰撴柇鐐癸紝鏂簡鍚庢墽琛屽懡浠?br/>
()command 12
()silent
()print “fd is %d\n”,fd
()continue
()end
鍔ㄦ乸ing涓嶄慨鏀逛唬鐮併?/p>
tracepoint 榪滅▼涓繪満閫氳璋冭瘯錛屽墠绔痵tub绔嬪埢鎭㈠鎵ц錛屼絾浼氳褰曚笅鏉ャ?/p>
catchpoint
榪涘叆瀛愬嚱鏁板唴閮ㄣ傚崟姝?step
姹囩紪 stepi
stepi 4
綾諱技nexti
涓嶈榪涘叆瀛愬嚱鏁?
next
緇х畫鎵ц
continue
璺戣搗鏉ョ洿鍒?鍙鋒柇鐐瑰懡涓?/p>
until 3
璺戣搗鏉ョ洿鍒?鍙鋒柇鐐瑰懡涓紝蹇嵎紱佹鍏朵粬鏂偣銆?/p>
鎭㈠鎵ц鐩村埌鍑芥暟榪斿洖銆?/p>
finish
gdb 鏉滄挵浠g爜璋冪敤鍑芥暟銆?br/> call sum錛?錛?錛?…
寮哄埗main鍑芥暟 return銆?br/> return 1
寮傚父鎴栨柇鐐硅繘鍏ヨ皟璇曞櫒銆?br/> 璋冭瘯鍣ㄥ彂璧蜂腑鏂紝璁╃▼搴忎腑鏂笅鏉ャ俢trl錛婥錛宎pp鏀跺埌涓柇淇″彿錛岃繘鍏ヨ皟璇曞櫒銆?/p>
璋冭瘯鍣ㄨ鍖?璋冭瘯絎﹀彿銆?/p>
浜岃繘鍒訛紞璋冭瘯絎﹀彿錛嶆簮鐮?/p>
linux dwarf 瀛樺偍璋冭瘯絎﹀彿淇℃伅銆俫cc
readelf -h filename
閲岄潰濡傛灉鏈塴ine location debug鏍囩ずreadelf -w 瀵煎嚭璋冭瘯鏂囦歡
gcc -g 鎵嶈兘杈撳嚭絎﹀彿
ubuntu 絎﹀彿鏈嶅姟鍣?
< ddebs.ubuntu.com/pool/main/>
鍒嗙鎿嶄綔
strip
瀹夎ubunte鐨刲inux 鍐呮牳絎﹀彿
https://askubuntu.com/questions/197016/how-to-install-a-package-that-contains-ubuntu-kernel-debug-symbols
瀹夎libc絎﹀彿
dpkg -s /lib/x86_64-linux-gun/libc-2.15.so
dpkg -s libc.so.6
sudo apt-get -c aptproxy.conf install libc6-dbg
libc 璋冭瘯絎﹀彿
sudo apt-get install libc6-dbg
絎﹀彿璺緞
gdb 浣跨敤file 鎴?symbol錛峟ile 鍔犺澆絎﹀彿鏂囦歡
鑷姩鎼滅儲 path 璺緞
錛坓db錛塱 share
* 鍏變韓搴撴病璋冭瘯淇℃伅
鎼滅儲絎﹀彿
info vaiables regex 綾誨悕錛忓嚱鏁板悕錛忓彉閲忓悕
info addriess 鍑芥暟鍚?/p>
info symbol 鍦板潃
(gdb) info address main
Symbol “main” is a function at address 0x400547.
(gdb) info symbol 0x400547
main in section .text of /home/gao/code/a
.
info os
鏌ョ湅鍔犺澆鐨勬枃浠跺唴瀛樹綅緗?/p>
info files
鍒楀嚭鍏ㄥ眬鍙橀噺
info variable
info va
list
list -
dir 婧愮爜璺緞
show dir
甯哥敤鍛戒護婧愮爜
瀹夎緋葷粺宸ュ叿婧愮爜鍜岃皟璇?/p>
apt-get source coreutils
sudo apt-get install coreutils-dbgsym
gdb /bin/ls
list main
dir ~/src/coreutils-7.4/src
list main
libc
sudo apt-get source libc6-dev
/home/ge/eglibc-2.15
dir 鎼滅儲璺緞 錛氬垎鍓?br/>
$cdir 緙栬瘧璺緞
cwd 褰撳墠宸ヤ綔璺緞
瑙傚療瀵勫瓨鍣?br/> info reg
鏍?br/>
瀛愬嚱鏁拌繑鍥炲湴鍧
鍑芥暟鍙傛暟
灞閮ㄥ彉閲?/p>
bt n 瑙傚療鍑芥暟榪斿洖鍦板潃
frame n 鍒囨崲鏍堝撫
up n
down n
info frame 錛籥ddress錛?br/> info args
info locals
娉ㄦ剰錛屽垏鎹㈡爤甯т箣鍚庡彲鑳戒細鍙戠敓錛屾湰鍦板彉閲忓間笉鍑嗙‘錛屽洜涓哄煎瓨鍦ㄥ瘎瀛樺櫒涓渶瑕佸皬蹇冦?/p>
瑙傚療鍐呭瓨
print
p /f 琛ㄨ揪寮? 琛ㄨ揪寮忚鎵撳嵃浣嶇疆
xduotcf
x
x /Nuf
N 鎵撳嵃鍑犱釜鍗曞厓
u 姣忎釜鍗曞厓澶у皬 b-1byte w-2byte h-4byte g-8byte
f s瀛楃涓瞚鎸囦護鏍煎紡
x/s 0xfffff81946000 鎵撳嵃瀛楃涓?/p>
x /32bx arg bit 16紱佸埗
(gdb) x /32bx &i
0x7fffffffc76c: 0x01 0x00 0x00 0x00 0x70 0x05 0x40 0x00
0x7fffffffc774: 0x00 0x00 0x00 0x00 0x40 0xfa 0xa2 0xf7
0x7fffffffc77c: 0xff 0x7f 0x00 0x00 0x58 0xc8 0xff 0xff
0x7fffffffc784: 0xff 0x7f 0x00 0x00 0x58 0xc8 0xff 0xff
(gdb)p arg[0]
p arg[i]
p *&a[0]@10 a0鏁扮粍寮濮嬬殑10涓厓绱?/p>
鍙嶆眹緙?/p>
disas main main鍙嶆眹緙栦唬鐮?br/> x/5i schedule 榪欎釜鍦板潃寮濮嬬殑5鏉℃眹緙栨寚浠ゃ?/p>
gdb mov 浠庡乏寰鍙寵祴鍊糰t&t姹囩紪銆?/p>
stop 瑕佷笉瑕佷腑鏂笅鏉ョ湅
printf 鎵撳嵃淇℃伅
pass 瑕佷笉瑕佷紶閫掔粰搴旂敤紼嬪簭銆?/p>
handle SIGPIPE 涓嶈涓柇涓嬫潵錛屾墦鍗頒竴涓俊鎭紝緗戠粶紼嬪簭甯哥敤
(gdb) handle SIGPIPE nostop
Signal Stop Print Pass to program Description
SIGPIPE No Yes Yes Broken pipe
info threads
LWP錛峫ight weight process 綰跨▼緙栧彿銆?br/> * gdb褰撳墠綰跨▼
鍒囨崲褰撳墠綰跨▼
thread 2
鎵撳嵃鎵鏈夌嚎紼?/p>
thread apply all bt 閽堝涓緹ょ嚎紼嬬殑鍛戒護閬垮厤鍒囨崲鏉ョ湅銆?/p>
綰跨▼鏀瑰悕瀛?/p>
thread name 錛籲ame錛?/p>
鎴戣嚜宸辯粡楠?LWP 鍙互寰堝ソ鐨勮瀵熺嚎紼嬭礋杞芥儏鍐點?/p>
鍙傝冭祫鏂欙細
Object-oriented Programming with ANSI-C
1993騫達紝絎竴浠絚濡備綍緙栧啓OO鐨勮祫鏂?free.
OOC.PDF
https://www.cs.rit.edu/~ats/books/ooc.pdf
涓枃緲昏瘧錛?br/> https://code.google.com/p/ooc/downloads/detail?name=ooc-translate-preview-r26.pdf&can=2&q=
杞婚噺綰х殑C璇█闈㈠悜瀵硅薄緙栫▼妗嗘灦
http://sinojelly.blog.51cto.com/479153/281184
UML鈥擮OPC宓屽叆寮廋璇█寮鍙戠簿璁?br/>
閲岄潰鏈変竴濂楁鏋跺彲浠?c鍐橭O.
http://pan.baidu.com/share/link?shareid=3402978666&uk=3188261067&adapt=pc&fr=ftw#path=%252FC%25E8%25AF%25AD%25E8%25A8%2580
浣犺瘯榪囪繖鏍峰啓C紼嬪簭鍚?錛嶏紞鍑芥暟寮忕紪紼?br/> < >
鎴戞墍鍋忕埍鐨?C 璇█闈㈠悜瀵硅薄緙栫▼鑼冨紡錛嶏紞浜戦
http://blog.codingnow.com/2010/03/object_oriented_programming_in_c.html
C璇█闈㈠悜瀵硅薄緙栫▼ -- 6綃囦笓鏍?br/> http://blog.csdn.net/column/details/object-orient-c.html
** valgrind --tool=cachegrind ./test2**
#include <stdio.h>
#define MAXROW 8000
#define MAXCOL 8000
int main () {
int i,j;
static int x[MAXROW][MAXCOL];
printf ("Starting!\n");
for (i=0;i<MAXROW;i++)
for (j=0;j<MAXCOL;j++)
x[i][j] = i*j;
printf("Completed!\n");
return 0;
}
#include <stdio.h>
#define MAXROW 8000
#define MAXCOL 8000
int main () {
int i,j;
static int x[MAXROW][MAXCOL];
printf ("Starting!\n");
for (j=0;j<MAXCOL;j++)
for (i=0;i<MAXROW;i++)
x[i][j] = i*j;
printf("Completed!\n");
return 0;
}
```
##緇撴灉
Command: ./test1
Starting!
Completed!
I refs: 905,721,688
I1 misses: 4,177
LLi misses: 2,808
I1 miss rate: 0.00%
LLi miss rate: 0.00%
D refs: 514,830,867 (386,118,735 rd + 128,712,132 wr)
D1 misses: 4,025,828 ( 23,565 rd + 4,002,263 wr)
LLd misses: 4,008,456 ( 6,997 rd + 4,001,459 wr)
D1 miss rate: 0.8% ( 0.0% + 3.1% )
LLd miss rate: 0.8% ( 0.0% + 3.1% )
LL refs: 4,030,005 ( 27,742 rd + 4,002,263 wr)
LL misses: 4,011,264 ( 9,805 rd + 4,001,459 wr)
LL miss rate: 0.3% ( 0.0% + 3.1% )
gcc -o test2 test2.c
** valgrind --tool=cachegrind ./test2**
I refs: 905,720,801
I1 misses: 4,113
LLi misses: 2,811
I1 miss rate: 0.00%
LLi miss rate: 0.00%
D refs: 514,830,348 (386,118,427 rd + 128,711,921 wr)
D1 misses: 64,025,705 ( 23,462 rd + 64,002,243 wr)
LLd misses: 4,016,427 ( 6,977 rd + 4,009,450 wr)
D1 miss rate: 12.4% ( 0.0% + 49.7% )
LLd miss rate: 0.8% ( 0.0% + 3.1% )
LL refs: 64,029,818 ( 27,575 rd + 64,002,243 wr)
LL misses: 4,019,238 ( 9,788 rd + 4,009,450 wr)
LL miss rate: 0.3% ( 0.0% + 3.1% )
Starting!
Completed!
```
valgrind璋冭瘯CPU緙撳瓨鍛戒腑鐜囧拰鍐呭瓨娉勬紡
http://laoxu.blog.51cto.com/4120547/1395236