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

正文內(nèi)容

gdb中文手冊(編輯修改稿)

2025-07-23 08:54 本頁面
 

【文章內(nèi)容簡介】 跟蹤時,程序不會因為沒有debug信息而不停住。這個參數(shù)有很利于查看機器碼。set stepmod off關(guān)閉stepmode模式。finish運行程序,直到當(dāng)前函數(shù)完成返回。并打印函數(shù)返回時的堆棧地址和返回值及參數(shù)值等信息。until 或 u當(dāng)你厭倦了在一個循環(huán)體內(nèi)單步跟蹤時,這個命令可以運行程序直到退出循環(huán)體。stepi 或 sinexti 或 ni單步跟蹤一條機器指令!一條程序代碼有可能由數(shù)條機器指令完成,stepi和nexti可以單步執(zhí)行機器指令。與之一樣有相同功能的命令是“display/i $pc” ,當(dāng)運行完這個命令后,單步跟蹤會在打出程序代碼的同時打出機器指令(也就是匯編代碼)九、信號(Signals)信號是一種軟中斷,是一種處理異步事件的方法。一般來說,操作系統(tǒng)都支持許多信號。尤其是UNIX,比較重要應(yīng)用程序一般都會處理信號。UNIX 定義了許多信號,比如SIGINT表示中斷字符信號,也就是Ctrl+C的信號,SIGBUS表示硬件故障的信號;SIGCHLD表示子進程狀態(tài)改變信號;SIGKILL表示終止程序運行的信號,等等。信號量編程是UNIX下非常重要的一種技術(shù)。GDB有能力在你調(diào)試程序的時候處理任何一種信號,你可以告訴GDB需要處理哪一種信號。你可以要求GDB收到你所指定的信號時,馬上停住正在運行的程序,以供你進行調(diào)試。你可以用GDB的handle命令來完成這一功能。handle在GDB中定義一個信號處理。信號可以以SIG開頭或不以SIG開頭,可以用定義一個要處理信號的范圍(如:SIGIOSIGKILL,表示處理從SIGIO信號到SIGKILL的信號,其中包括SIGIO,SIGIOT,SIGKILL三個信號),也可以使用關(guān)鍵字all來標(biāo)明要處理所有的信號。一旦被調(diào)試的程序接收到信號,運行程序馬上會被GDB停住,以供調(diào)試。其可以是以下幾種關(guān)鍵字的一個或多個。Nostop當(dāng)被調(diào)試的程序收到信號時,GDB不會停住程序的運行,但會打出消息告訴你收到這種信號。Stop當(dāng)被調(diào)試的程序收到信號時,GDB會停住你的程序。Print當(dāng)被調(diào)試的程序收到信號時,GDB會顯示出一條信息。Noprint當(dāng)被調(diào)試的程序收到信號時,GDB不會告訴你收到信號的信息。PassNoignore當(dāng)被調(diào)試的程序收到信號時,GDB不處理信號。這表示,GDB會把這個信號交給被調(diào)試程序會處理。NopassIgnore當(dāng)被調(diào)試的程序收到信號時,GDB不會讓被調(diào)試程序來處理這個信號。info signalsinfo handle查看有哪些信號在被GDB檢測中。十、線程(Thread Stops)如果你程序是多線程的話,你可以定義你的斷點是否在所有的線程上,或是在某個特定的線程。GDB很容易幫你完成這一工作。breakthread breakthreadif ...linespec指定了斷點設(shè)置在的源程序的行號。threadno指定了線程的ID,注意,這個ID是GDB分配的,你可以通過“info threads”命令來查看正在運行程序中的線程信息。如果你不指定thread 則表示你的斷點設(shè)在所有線程上面。你還可以為某線程指定斷點條件。如:(gdb) break :13 thread 28 if bartab lim當(dāng)你的程序被GDB停住時,所有的運行線程都會被停住。這方便你你查看運行程序的總體情況。而在你恢復(fù)程序運行時,所有的線程也會被恢復(fù)運行。那怕是主進程在被單步調(diào)試時。查看棧信息當(dāng)程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。當(dāng)你的程序調(diào)用了一個函數(shù),函數(shù)的地址,函數(shù)參數(shù),函數(shù)內(nèi)的局部變量都會被壓入“?!保⊿tack)中。你可以用GDB命令來查看當(dāng)前的棧中的信息。下面是一些查看函數(shù)調(diào)用棧信息的GDB命令:backtrace bt 打印當(dāng)前的函數(shù)調(diào)用棧的所有信息。如:(gdb) bt0 func (n=250) at :61 0x08048524 in main (argc=1, argv=0xbffff674) at :302 0x400409ed in __libc_start_main () from /lib/從上可以看出函數(shù)的調(diào)用棧信息:__libc_start_main main() func()backtrace btn是一個正整數(shù),表示只打印棧頂上n層的棧信息。backtracebtn表一個負整數(shù),表示只打印棧底下n層的棧信息。如果你要查看某一層的信息,你需要在切換當(dāng)前的棧,一般來說,程序停止時,最頂層的棧就是當(dāng)前棧,如果你要查看棧下面層的詳細信息,首先要做的是切換當(dāng)前棧。framefn是一個從0開始的整數(shù),是棧中的層編號。比如:frame 0,表示棧頂,frame 1,表示棧的第二層。up 表示向棧的上面移動n層,可以不打n,表示向上移動一層。 down表示向棧的下面移動n層,可以不打n,表示向下移動一層。 上面的命令,都會打印出移動到的棧層的信息。如果你不想讓其打出信息。你可以使用這三個命令:selectframe對應(yīng)于 frame 命令。upsilently對應(yīng)于 up 命令。downsilently對應(yīng)于 down 命令。查看當(dāng)前棧層的信息,你可以用以下GDB命令:frame 或 f 后的斷點次數(shù)。continue,c,fg三個命令都是一樣的意思。 會打印出這些信息:棧的層編號,當(dāng)前的函數(shù)名,函數(shù)參數(shù)值,函數(shù)所在文件及行號,函數(shù)執(zhí)行到的語句。info frame info f 這個命令會打印出更為詳細的當(dāng)前棧層的信息,只不過,大多數(shù)都是運行時的內(nèi)內(nèi)地址。比如:函數(shù)地址,調(diào)用函數(shù)的地址,被調(diào)用函數(shù)的地址,目前的函數(shù)是由什么樣的程序語言寫成的、函數(shù)參數(shù)地址及值、局部變量的地址等等。如:(gdb) info fStack level 0, frame at 0xbffff5d4:eip = 0x804845d in func (:6)。 saved eip 0x8048524called by frame at 0xbffff60csource language c.Arglist at 0xbffff5d4, args: n=250Locals at 0xbffff5d4, Previous frame39。s sp is 0x0Saved registers:ebp at 0xbffff5d4, eip at 0xbffff5d8info args打印出當(dāng)前函數(shù)的參數(shù)名及其值。info locals打印出當(dāng)前函數(shù)中所有局部變量及其值。info catch打印出當(dāng)前的函數(shù)中的異常處理信息。查看源程序一、顯示源代碼GDB 可以打印出所調(diào)試程序的源代碼,當(dāng)然,在程序編譯時一定要加上g的參數(shù),把源程序信息編譯到執(zhí)行文件中。不然就看不到源程序了。當(dāng)程序停下來以后,GDB會報告程序停在了那個文件的第幾行上。你可以用list命令來打印程序的源代碼。還是來看一看查看源代碼的GDB命令吧。list 顯示程序第linenum行的周圍的源程序。list顯示函數(shù)名為function的函數(shù)的源程序。list 顯示當(dāng)前行后面的源程序。list – 顯示當(dāng)前行前面的源程序。一般是打印當(dāng)前行的上5行和下5行,如果顯示函數(shù)是是上2行下8行,默認是10行,當(dāng)然,你也可以定制顯示的范圍,使用下面命令可以設(shè)置一次顯示源程序的行數(shù)。set listsize 設(shè)置一次顯示源代碼的行數(shù)。show listsize查看當(dāng)前l(fā)istsize的設(shè)置。list命令還有下面的用法:list , 顯示從first行到last行之間的源代碼。list , 顯示從當(dāng)前行到last行之間的源代碼。list +往后顯示源代碼。一般來說在list后面可以跟以下這們的參數(shù):行號。當(dāng)前行號的正偏移量。當(dāng)前行號的負偏移量。哪個文件的哪一行。函數(shù)名。哪個文件中的哪個函數(shù)。程序運行時的語句在內(nèi)存中的地址。二、搜索源代碼不僅如此,GDB還提供了源代碼搜索的命令:forwardsearchsearch 向前面搜索。reversesearch全部搜索。其中,就是正則表達式,也主一個字符串的匹配模式,關(guān)于正則表達式,我就不在這里講了,還請各位查看相關(guān)資料。三、指定源文件的路徑某些時候,用g編譯過后的執(zhí)行程序中只是包括了源文件的名字,沒有路徑名。GDB提供了可以讓你指定源文件的路徑的命令,以便GDB進行搜索。directory dir 加一個源文件路徑到當(dāng)前路徑的前面。如果你要指定多個路徑,UNIX下你可以使用“:”,Windows下你可以使用“?!?。directory 清除所有的自定義的源文件搜索路徑信息。show directories 顯示定義了的源文件搜索路徑。四、源代碼的內(nèi)存你可以使用info line命令來查看源代碼在內(nèi)存中的地址。info line后面可以跟“行號”,“函數(shù)名”,“文件名:行號”,“文件名:函數(shù)名”,這個命令會打印出所指定的源碼在運行時的內(nèi)存地址,如:(gdb) info line :funcLine 5 of starts at address 0x8048456and ends at 0x804845d .還有一個命令(disassemble)你可以查看源程序的當(dāng)前執(zhí)行時的機器碼,這個命令會把目前內(nèi)存中的指令dump出來。如下面的示例表示查看函數(shù)func的匯編代碼。(gdb) disassemble funcDump of assembler code for function func:0x8048450 : push %ebp0x8048451 : mov %esp,%ebp0x8048453 : sub $0x18,%esp0x8048456 : movl $0x0,0xfffffffc(%ebp)0x804845d : movl $0x1,0xfffffff8(%ebp)0x8048464 : mov 0xfffffff8(%ebp),%eax0x8048467 : cmp 0x8(%e
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1