• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            c++實(shí)例研究

            從0開(kāi)始

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              104 隨筆 :: 0 文章 :: 20 評(píng)論 :: 0 Trackbacks

            一、顯示源代碼

            GDB 可以打印出所調(diào)試程序的源代碼,當(dāng)然,在程序編譯時(shí)一定要加上-g的參數(shù),把源程序信息編譯到執(zhí)行文件中。不然就看不到源程序了。當(dāng)程序停下來(lái)以后,GDB會(huì)報(bào)告程序停在了那個(gè)文件的第幾行上。你可以用list命令來(lái)打印程序的源代碼。還是來(lái)看一看查看源代碼的GDB命令吧。   
                list <linenum>        
            顯示程序第linenum行的周圍的源程序。   
                list <function>        
            顯示函數(shù)名為function的函數(shù)的源程序。       
                list       
            顯示當(dāng)前行后面的源程序。   
                list -        
            顯示當(dāng)前行前面的源程序。

            一般是打印當(dāng)前行的上5行和下5行,如果顯示函數(shù)是是上2行下8行,默認(rèn)是10行,當(dāng)然,你也可以定制顯示的范圍,使用下面命令可以設(shè)置一次顯示源程序的行數(shù)。

            set listsize <count>        設(shè)置一次顯示源代碼的行數(shù)。       
                show listsize      
            查看當(dāng)前listsize的設(shè)置。       

            list命令還有下面的用法:

            list <first>, <last>        顯示從first行到last行之間的源代碼。   
                list , <last>       
            顯示從當(dāng)前行到last行之間的源代碼。       
                list +        
            往后顯示源代碼。       

            一般來(lái)說(shuō)在list后面可以跟以下這們的參數(shù):

            <linenum>   行號(hào)。
                <+offset>  
            當(dāng)前行號(hào)的正偏移量。
                <-offset>  
            當(dāng)前行號(hào)的負(fù)偏移量。
                <filename:linenum>
            哪個(gè)文件的哪一行。
                <function>
            函數(shù)名。
                <filename:function>
            哪個(gè)文件中的哪個(gè)函數(shù)。
                <*address>
            程序運(yùn)行時(shí)的語(yǔ)句在內(nèi)存中的地址。   

            二、搜索源代碼

            不僅如此,GDB還提供了源代碼搜索的命令:

            forward-search <regexp>search <regexp>        向前面搜索。

            reverse-search <regexp> 全部搜索。

            其中<regexp>是正則表達(dá)式,也主一個(gè)字符串的匹配模式,關(guān)于正則表達(dá)式,我就不在這里講了,還請(qǐng)各位查看相關(guān)資料。

            三、指定源文件的路徑

            某些時(shí)候,用-g編譯過(guò)后的執(zhí)行程序中只是包括了源文件的名字,沒(méi)有路徑名。GDB提供了可以讓你指定源文件的路徑的命令,以便GDB進(jìn)行搜索。

            directory <dirname ... >dir <dirname ... >         加一個(gè)源文件路徑到當(dāng)前路徑的前面。如果你要指定多個(gè)路徑,

            UNIX下你可以使用“:”Windows下你可以使用“;”分隔。
                directory       
            清除所有的自定義的源文件搜索路徑信息。   
                show directories        
            顯示定義了的源文件搜索路徑。       

            四、源代碼的內(nèi)存

            你可以使用info line命令來(lái)查看源代碼在內(nèi)存中的地址。info line后面可以跟“行號(hào)”,“函數(shù)名”,“文件名:行號(hào)”,“文件名:函數(shù)名”,這個(gè)命令會(huì)打印出所指定的源碼在運(yùn)行時(shí)的內(nèi)存地址,如:

                    (gdb) info line tst.c:func
                    Line 5 of "tst.c" starts at address 0x8048456 <func+6> and ends at 0x804845d <func+13>.

            還有一個(gè)命令(disassemble)你可以查看源程序的當(dāng)前執(zhí)行時(shí)的機(jī)器碼,這個(gè)命令會(huì)把目前內(nèi)存中的指令dump出來(lái)。如下面的示例表示查看函數(shù)func的匯編代碼。

                    (gdb) disassemble func
                    Dump of assembler code for function func:
                    0x8048450 <func>:       push   %ebp
                    0x8048451 <func+1>:     mov    %esp,%ebp
                    0x8048453 <func+3>:     sub    $0x18,%esp
                    0x8048456 <func+6>:     movl   $0x0,0xfffffffc(%ebp)
                    0x804845d <func+13>:    movl   $0x1,0xfffffff8(%ebp)
                    0x8048464 <func+20>:    mov    0xfffffff8(%ebp),%eax
                    0x8048467 <func+23>:    cmp    0x8(%ebp),%eax
                    0x804846a <func+26>:    jle    0x8048470 <func+32>
                    0x804846c <func+28>:    jmp    0x8048480 <func+48>
                    0x804846e <func+30>:    mov    %esi,%esi
                    0x8048470 <func+32>:    mov    0xfffffff8(%ebp),%eax
                    0x8048473 <func+35>:    add    %eax,0xfffffffc(%ebp)
                    0x8048476 <func+38>:    incl   0xfffffff8(%ebp)
                    0x8048479 <func+41>:    jmp    0x8048464 <func+20>
                    0x804847b <func+43>:    nop
                    0x804847c <func+44>:    lea    0x0(%esi,1),%esi
                    0x8048480 <func+48>:    mov    0xfffffffc(%ebp),%edx
                    0x8048483 <func+51>:    mov    %edx,%eax
                    0x8048485 <func+53>:    jmp    0x8048487 <func+55>
                    0x8048487 <func+55>:    mov    %ebp,%esp
                    0x8048489 <func+57>:    pop    %ebp
                    0x804848a <func+58>:    ret
                    End of assembler dump.

            posted on 2010-05-13 14:52 elprup 閱讀(4809) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 工程問(wèn)題集
            久久精品国产69国产精品亚洲| 伊人久久大香线蕉av不卡| 久久久久久狠狠丁香| 国产精品久久久久久搜索| 99久久婷婷国产一区二区| 国产激情久久久久影院老熟女免费 | 久久亚洲国产中v天仙www| 国产成人精品久久亚洲| 亚洲精品国精品久久99热| 中文字幕无码免费久久| 久久久国产精品福利免费| 一个色综合久久| 久久精品国产半推半就| 婷婷久久综合| 亚洲精品乱码久久久久久 | 国内精品伊人久久久久av一坑| 久久综合久久综合九色| 久久久SS麻豆欧美国产日韩| 久久香蕉国产线看观看乱码| 亚洲狠狠婷婷综合久久蜜芽| 久久久国产精品| 香蕉久久夜色精品国产小说| 国色天香久久久久久久小说| 久久久久国色AV免费看图片| 久久91精品国产91久久户| 国内精品久久久久影院老司| 99久久综合国产精品二区| AV狠狠色丁香婷婷综合久久| 亚洲中文字幕无码久久综合网| 日韩欧美亚洲国产精品字幕久久久| 国产精品久久国产精麻豆99网站| 久久精品无码一区二区WWW | 久久久久人妻一区精品色| 久久亚洲精品国产精品婷婷| 久久国产免费| 久久露脸国产精品| 久久综合久久性久99毛片| 久久久噜噜噜久久| 四虎国产精品成人免费久久| 日本久久中文字幕| 日本一区精品久久久久影院|