<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 簡介 GNU工具集中的調試器是GDB(GNU Debugger),該程序是一個交互式工具,工作在字符模式。 除gdb外,linux下比較有名的調試器還有xxgdb, ddd, kgdb, ups。 GDB主要幫忙你完成下面四個方面的功能: 1. 啟動程序,可以按照你的自定義的要求隨心所欲的運行程序。 2. 可讓被調試的程序在你所指定的調置的斷點處停住。(斷點可以是條件表達式) 3. 當程序被停住時,可以檢查此時你的程序中所發生的事。 4. 動態的改變你程序的執行環境。 **yum install -y gcc-c++ gdb** # 生成調試信息 一般來說GDB主要調試的是C/C++的程序。要調試C/C++的程序,首先在編譯時,我們必須要把調試信息加到可執行文件中。使用編譯器(cc/gcc/g++)的 -g 參數可以做到這一點。如: > gcc -g hello.c -o hello > > g++ -g hello.cpp -o hello 如果沒有-g,你將看不見程序的函數名、變量名,所代替的全是運行時的內存地址。 # 啟動GDB * 啟動gdb:`gdb program` ~~~ program 也就是你的執行文件,一般在當前目錄下。 ~~~ * 設置運行參數 ~~~ set args 可指定運行時參數。(如:set args 10 20 30 40 50 ) show args 命令可以查看設置好的運行參數。 ~~~ * 啟動程序 ~~~ run: 程序開始執行,如果有斷點,停在第一個斷點處 start: 程序向下執行一行。 ~~~ # 顯示源代碼 用list命令來打印程序的源代碼。默認打印10行。 ~~~ ? list linenum: 打印第linenm行的上下文內容. ? list function: 顯示函數名為function的函數的源程序。 ? list: 顯示當前行后面的源程序。 ? list -: 顯示當前行前面的源程序。 ~~~ 一般是打印當前行的上5行和下5行,如果顯示函數是是上2行下8行,默認是10行,當然,你也可以定制顯示的范圍,使用下面命令可以設置一次顯示源程序的行數。 ~~~ ? set listsize count:設置一次顯示源代碼的行數。 ? show listsize: 查看當前listsize的設置。 ~~~ # 斷點操作 **1)簡單斷點** ~~~ break 設置斷點,可以簡寫為b ? b 10 設置斷點,在源程序第10行 ? b func 設置斷點,在func函數入口處 ~~~ **2)多文件設置斷點** C++中可以使用class::function或function(type,type)格式來指定函數名。 如果有名稱空間,可以使用namespace::class::function或者function(type,type)格式來指定函數名。 ~~~ ? break filename:linenum -- 在源文件filename的linenum行處停住 ? break filename:function -- 在源文件filename的function函數的入口處停住 ? break class::function或function(type,type) -- 在類class的function函數的入口處停住 ? break namespace::class::function -- 在名稱空間為namespace的類class的function函數的入口處停住 ~~~ **3)查詢所有斷點** * info b * info break * i break * i b # 條件斷點 一般來說,為斷點設置一個條件,我們使用if關鍵詞,后面跟其斷點條件。 設置一個條件斷點: > b test.c:8 if Value == 5 # 維護斷點 1)delete \[range...\] 刪除指定的斷點,其簡寫命令為d。 * 如果不指定斷點號,則表示刪除所有的斷點。range表示斷點號的范圍(如:3-7)。 * 比刪除更好的一種方法是disable停止點,disable了的停止點,GDB不會刪除,當你還需要時,enable即可,就好像回收站一樣。 2) disable \[range...\] 使指定斷點無效,簡寫命令是dis。 如果什么都不指定,表示disable所有的停止點。 3) enable \[range...\] 使無效斷點生效,簡寫命令是ena。 如果什么都不指定,表示enable所有的停止點。 # 調試代碼 * run 運行程序,可簡寫為r * next 單步跟蹤,函數調用當作一條簡單語句執行,可簡寫為n * step 單步跟蹤,函數調進入被調用函數體內,可簡寫為s * finish 退出進入的函數 * until 在一個循環體內單步跟蹤時,這個命令可以運行程序直到退出循環體,可簡寫為u。 * continue 繼續運行程序,停在下一個斷點的位置,可簡寫為c * quit 退出gdb,可簡寫為q # 數據查看 1)查看運行時數據 print 打印變量、字符串、表達式等的值,可簡寫為p ~~~ p count 打印count的值 ~~~ # 自動顯示 你可以**設置一些自動顯示的變量**,當程序停住時,或是在你單步跟蹤時,這些變量會自動顯示。相關的GDB命令是display。 * display 變量名 * info display -- 查看display設置的自動顯示的信息。 * undisplay num(info display時顯示的編號) * delete display dnums… -- 刪除自動顯示,dnums意為所設置好了的自動顯式的編號。如果要同時刪除幾個,編號可以用空格分隔,如果要刪除一個范圍內的編號,可以用減號表示(如:2-5) * disable display dnums… * enable display dnums… * disable和enalbe不刪除自動顯示的設置,而只是讓其失效和恢復。 # 查看修改變量的值 1)`ptype width` -- 查看變量width的類型 ~~~ type = double ~~~ 2)`p width `-- 打印變量width 的值 ~~~ $4 = 13 ~~~ 你可以使用set var命令來告訴GDB,width不是你GDB的參數,而是程序的變量名,如: ~~~ set var width=47 // 將變量var值設置為47 ~~~ **在你改變程序變量取值時,最好都使用set var格式的GDB命令**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看