freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

gdb用戶使用手冊(文件)

2025-09-10 15:52 上一頁面

下一頁面
 

【正文】 file:。 line number:853 [6] file:。 恢復(fù)程序運行和單步調(diào)試當(dāng)程序被停住了,你可以用continue命令恢復(fù)程序的運行直到程序結(jié)束,或下一個斷點到來。continue,c,fg三個命令都是一樣的意思。后面可以加count也可以不加,不加表示一條條地執(zhí)行,加表示執(zhí)行后面的count條指令,然后再停住。 set stepmode set stepmode on 打開stepmode模式,于是,在進(jìn)行單步跟蹤時,程序不會因為沒有debug信息而不停住。并打印函數(shù)返回時的堆棧地址和返回值及參數(shù)值等信息。 信號(Signals)信號是一種軟中斷,是一種處理異步事件的方法。信號量編程是UNIX下非常重要的一種技術(shù)。 handle signal keywords... 在GDB中定義一個信號處理。 nostop 當(dāng)被調(diào)試的程序收到信號時,GDB不會停住程序的運行,但會打出消息告訴你收到這種信號。 pass noignore 當(dāng)被調(diào)試的程序收到信號時,GDB不處理信號。 線程(Thread Stops)如果你程序是多線程的話,你可以定義你的斷點是否在所有的線程上,或是在某個特定的線程。如果你不指定thread threadno則表示你的斷點設(shè)在所有線程上面。而在你恢復(fù)程序運行時,所有的線程也會被恢復(fù)運行。你可以用GDB命令來查看當(dāng)前的棧中的信息。 如果你要查看某一層的信息,你需要在切換當(dāng)前的棧,一般來說,程序停止時,最頂層的棧就是當(dāng)前棧,如果你要查看棧下面層的詳細(xì)信息,首先要做的是切換當(dāng)前棧。 down n 表示向棧的下面移動n層,可以不打n,表示向下移動一層。 upsilently n 對應(yīng)于 up 命令。比如:函數(shù)地址,調(diào)用函數(shù)的地址,被調(diào)用函數(shù)的地址,目前的函數(shù)是由什么樣的程序語言寫成的、函數(shù)參數(shù)地址及值、局部變量的地址等等。 info locals 打印出當(dāng)前函數(shù)中所有局部變量及其值。當(dāng)程序停下來以后,GDB會報告程序停在了那個文件的第幾行上。 list function 顯示函數(shù)名為function的函數(shù)的源程序。 set listsize count 設(shè)置一次顯示源代碼的行數(shù)。 list + 往后顯示源代碼。 filename:linenum 哪個文件的哪一行。 搜索源代碼不僅如此,GDB還提供了源代碼搜索的命令: forwardsearch regexp search regexp 向前面搜索。GDB提供了可以讓你指定源文件的路徑的命令,以便GDB進(jìn)行搜索。 directory 清除所有的自定義的源文件搜索路徑信息。如下面的示例表示查看函數(shù)func的匯編代碼。可惜的是GDB不能使用你在程序中所定義的宏。 :: 指定一個在文件或是一個函數(shù)中的變量。例如,: gdb) p 39。這個是很正常的,因為優(yōu)化程序會刪改你的程序,整理你程序的語句順序,剔除一些無意義的變量等,所以在GDB調(diào)試這種程序時,運行時的指令和你所編寫指令就有不一樣,也就會出現(xiàn)你所想象不到的結(jié)果。 數(shù)組有時候,你需要查看一段連續(xù)的內(nèi)存空間的值。 于是,在GDB調(diào)試過程中,你可以以如下命令顯示出這個動態(tài)數(shù)組的取值: p *arraylen 的左邊是數(shù)組的首地址的值,也就是變量array所指向的內(nèi)容,右邊則是數(shù)據(jù)的長度,其保存在變量len中,其輸出結(jié)果,大約是下面這個樣子的: (gdb) p *arraylen $1 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40} 如果是靜態(tài)數(shù)組的話,可以直接用print數(shù)組名,就可以顯示數(shù)組中所有數(shù)據(jù)的內(nèi)容了。要做到這樣,你可以使用GDB的數(shù)據(jù)顯示格式: x 按十六進(jìn)制格式顯示變量。 t 按二進(jìn)制格式顯示變量。 (gdb) p i $21 = 101 (gdb) p/a i $22 = 0x65 (gdb) p/c i $23 = 101 39。 n 是一個正整數(shù),表示顯示內(nèi)存的長度,也就是說從當(dāng)前地址向后顯示幾個地址的內(nèi)容。u參數(shù)可以用下面的字符來代替,b表示單字節(jié),h表示雙字節(jié),w表示四字節(jié),g表示八字節(jié)。例如: 命令:x/3uh 0x54320 表示,從內(nèi)存地址0x54320讀取內(nèi)容,h表示以雙字節(jié)為一個單位,3表示三個單位,u表示按十六進(jìn)制顯示。 格式i和s同樣被display支持,一個非常有用的命令是: display/i $pc $pc是GDB的環(huán)境變量,表示著指令的地址,/i則表示輸出格式為機器指令碼,也就是匯編。 info display 查看display設(shè)置的自動顯示的信息。系統(tǒng)默認(rèn)為打開的,如: (gdb) f 0 set_quotes (lq=0x34c78 , rq=0x34c88 ) at :530 530 if (lquote != def_lquote) set print address off 關(guān)閉函數(shù)的參數(shù)地址顯示,如: (gdb) set print addr off (gdb) f 0 set_quotes (lq=, rq=) at :530 530 if (lquote != def_lquote) show print address 查看當(dāng)前地址顯示選項是否打開。 set print array off show print array set print elements numberofelements 這個選項主要是設(shè)置數(shù)組的,如果你的數(shù)組太大了,那么就可以指定一個numberofelements來指定數(shù)據(jù)顯示的最大長度,當(dāng)?shù)竭_(dá)這個長度時,GDB就不再往下顯示了。這個選項默認(rèn)為off。 show print sevenbitstrings 查看字符顯示開關(guān)是否打開。 typedef enum {Caterpillar, Cocoon, Butterfly} Bug_forms。 } form。這個選項默認(rèn)是off。 show print staticmembers 查看靜態(tài)數(shù)據(jù)成員選項設(shè)置。 歷史記錄當(dāng)你用GDB的print查看程序運行時的數(shù)據(jù)時,你每一個print都會被GDB記錄下來。 GDB環(huán)境變量你可以在GDB的調(diào)試環(huán)境中定義自己的變量,用來保存一些調(diào)試程序中的運行數(shù)據(jù)。如: set $foo = *object_ptr 使用環(huán)境變量時,GDB會在你第一次使用時創(chuàng)建這個變量,而在以后的使用中,則直接對其賦值。 這是一個比較強大的功能,環(huán)境變量和程序變量的交互使用,將使得程序調(diào)試更為靈活便捷。(除了浮點寄存器) info allregisters 查看所有寄存器的情況。如:p $eip。 在某些時候,很有可能你的變量和GDB中的參數(shù)沖突,如: (gdb) whatis width type = double (gdb) p width $4 = 13 (gdb) set width=47 Invalid syntax in expression. 因為,set width是GDB的命令,所以,出現(xiàn)了“Invalid syntax in expression”的設(shè)置錯誤,此時,你可以使用set var命令來告訴GDB,width不是你GDB的參數(shù),而是程序的變量名,如: (gdb) set var width=47 另外,還可能有些情況,GDB并不報告這種錯誤,所以保險起見,在你改變程序變量取值時,最好都使用set var格式的GDB命令。linespce可以是文件的行號,可以是file:line格式,可以是+num這種偏移量格式。所以最好是同一個函數(shù)中進(jìn)行跳轉(zhuǎn)。如: set $pc = 0x485 產(chǎn)生信號量使用singal命令,可以產(chǎn)生一個信號量給被調(diào)試的程序。所以singal取值也在這個范圍。 return return expression 使用return命令取消當(dāng)前函數(shù)的執(zhí)行,并立即返回,如果指定了expression,那么該表達(dá)式的值會被認(rèn)作函數(shù)的返回值。 在不同語言中使用GDBGDB支持下列語言:C, C++, Fortran, PASCAL, Java, Chill, assembly, 和 Modula2。也就是說,GDB會根據(jù)你所調(diào)試的程序的語言,來設(shè)置自己的語言環(huán)境,并讓GDB的命令跟著語言環(huán)境的改變而改變。這種跟著語言環(huán)境而改變的功能,真是體貼開發(fā)人員的一種設(shè)計。 info source 查看當(dāng)前文件的程序語言。4 使用示例 常用命令file 裝入想要調(diào)試的可執(zhí)行文件. kill 終止正在調(diào)試的程序. list 列出產(chǎn)生執(zhí)行文件的源代碼的一部分. next 執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部. step 執(zhí)行一行源代碼而且進(jìn)入函數(shù)內(nèi)部. run 執(zhí)行當(dāng)前被調(diào)試的程序 quit 終止 gdb watch 使你能監(jiān)視一個變量的值而不管它何時被改變. break 在代碼里設(shè)置斷點, 這將使程序執(zhí)行到這里時被掛起. make 使你能不退出 gdb 就可以重新產(chǎn)生可執(zhí)行文件. shell 使你能不離開 gdb 就執(zhí)行 UNIX shell 命令. 調(diào)試示例源程序: 1 include 2 3 int func(int n) 4 { 5 int sum=0,i。 9 } 10 return sum。 i=100。 25 return 0;26 }編譯生成執(zhí)行文件:(linux下) [wulcpslinux ~]$ gcc g o test使用GDB調(diào)試:[wulcpslinux ~]$ gdb test 。 21 } 22 23 printf(result[1100] = %d \n, result )。 17 long result = 0。 in。使用set language命令即可做到。如果GDB不能識為你所調(diào)試的編程語言,那么,C語言被認(rèn)為是默認(rèn)的環(huán)境。例如C/C++中對指針的語法是*p,而在Modula2中則是p^。文件名后綴為“.C, .cc, .cp, .cpp, .cxx, .c++”的,GDB會認(rèn)為是C++程序。并顯示函數(shù)的返回值,如果函數(shù)返回值是void,那么就不顯示。 強制函數(shù)返回如果你的調(diào)試斷點在某個函數(shù)中,并還有語句沒有執(zhí)行完。這非常方便于程序的調(diào)試,可以在程序運行的任意位置設(shè)置斷點,并在該斷點用GDB產(chǎn)生一個信號量,這種精確地在某處產(chǎn)生信號非常有利程序的調(diào)試。所以,jump命令也就是改變了這個寄存器中的值。 jump address 這里的address是代碼行的內(nèi)存地址。GDB提供了亂序執(zhí)行的功能,也就是說,GDB可以修改程序的執(zhí)行順序,可以讓程序執(zhí)行隨意跳躍。 修改變量值修改被調(diào)試程序運行時的變量值,在GDB中很容易實現(xiàn),使用GDB的print命令即可完成。 寄存器中放置了程序運行時的數(shù)據(jù),比如程序當(dāng)前運行的指令地址(ip),程序的當(dāng)前堆棧地址(sp)等等。輸入這樣的命令后,只用敲回車,重復(fù)執(zhí)行上一條語句,環(huán)境變量會自動累加,從而完成逐個輸出的功能。包括結(jié)構(gòu)體和數(shù)組。使用GDB的set命令。于是,
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1