<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] > [參考](https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html) ## 概述 qdb 支持調試的語句 * Ada * Assembly * C * C++ * D * Fortran * Go * Objective-C * OpenCL * Modula-2 * Pascal * Rust ## 安裝 ``` yum install gdb ``` ## 語法 ``` // 源碼 list | l 出源碼 l num 列出 num 行前后的源碼 l fun 列出方法 fun 的源碼 l start_num, end_num l file_name:fun_name set listsize count 設置一次顯示多少行源碼(默認為10) show listsize 顯示listsize directiory dir_name | dir dir_name , 將指定的目錄加入源碼文件的前綴 show dir 顯示目錄前綴 // 斷點和監視 break fun_name | b fun_name 在 fun_name 處打斷點 b line_number 在 line_number 處打斷點 b +offset 在offset 行后加斷點 b -offset 同上 b file_name:fun_name 文件的方法名處打斷點 b fine_name:line_number 同上 b *address 在某地址處打斷點。適用于沒有源碼的情況 b line_number if condition 條件斷點。 當條件為 true 時會中斷 tbreak n tb n 單次命中斷點。 如 tb 12 表示只會在第12行命中一次 // 監視 watch var 監視var變量 watch condition 帶條件的監視。如 watch a>1 // 刪除和禁用斷點 clear 清除當前行的斷點 clear fun_name 清除 fun_name 中的所有斷點 clear line_number 刪除該行的斷點 delete d 刪除所有的 breakpoints, watchpoints, or catchpoints. d num 刪除序號為 num 的斷點 d num1-num2 刪除序號從 num1 到 num2 的所有斷點 disable/enable num 禁用/啟用序號為 num 的斷點 disable/enable num1-num2 禁用/啟用 序號從 num1到 num2 的斷點 // 啟動 run r continue c kill 殺掉當前調試的程序 quit q 退出 // 調試 run | r 運行程序 step | s 步進調試,可以進入方法 next | n 步進調試,不會進入方法 finish 跳出當前方法 until line-number 運行到 line-number 行 where 顯示當前行數和方法 bt full 打印完整的棧信息 frame f 顯示當前棧的 frame 信息 f number 選擇frame up / down / up number /down number 選擇 frame // 變量 print var 簡寫 p var 打印變量var p file_name:var p/x var 以16進制打印整型變量 。 p/d var 10進制 p/u var unsigned int p/o var 8進制 p/t var 2進制 (1byte/8bits) p/c var 以字符形式 p/f var 以 floating 形式 p/a var 以十六進制地址 x/4b &var 以 4 byte 打印var 的內存 ptype var 顯示var 的類型 ptype date-type 顯示原類型 // 信息 info args 列出參數 info breakpoints info break i b 列出所有斷點 info break number i b number 列出序號為 number 的的斷點 info watchpoints i watchpoints 列出所在 watchpoints info threads 列出所有線程 inifo registers 列出寄存器的值 info set 列出當前 gdb的所的設置 i frame i stack 列出堆棧信息 i locals // 列出當前變量 i catch // 多窗口 layout 用于分割窗口,可以一邊查看代碼,一邊測試。主要有以下幾種用法: layout src 顯示源代碼窗口 layout asm 顯示匯編窗口 layout regs 顯示源代碼/匯編和寄存器窗口 layout split 顯示源代碼和匯編窗口 layout next 顯示下一個layout layout prev 顯示上一個layout Ctrl + L:刷新窗口 Ctrl + x,再按1: 單窗口模式,顯示一個窗口 Ctrl + x,再按2: 雙窗口模式,顯示兩個窗口 Ctrl + x,再按a: 回到傳統模式,即退出layout,回到執行layout之前的調試窗口。 ``` ## 啟動 方式一: `gdb <program>` 方式二: `gdb <program> <PID>` ## 示例 ### 查看可以源碼調試 方式一: 沒有源碼調試 ``` > db main Reading symbols from /root/main...(no debugging symbols found)...done. ``` 有源碼調試 ``` > db main Reading symbols from /root/main...done. ``` 方式二: 沒有源碼調試 ``` > readelf -S main|grep debug 沒有輸出 ``` 有源碼調試 ``` > readelf -S main|grep debug [27] .debug_aranges PROGBITS 0000000000000000 00001059 [28] .debug_info PROGBITS 0000000000000000 00001089 [29] .debug_abbrev PROGBITS 0000000000000000 00001140 [30] .debug_line PROGBITS 0000000000000000 00001193 [31] .debug_str PROGBITS 0000000000000000 000011d7 ``` ### 簡單調試 創建一個 main.c ``` #include <stdio.h> int main () { unsigned long long int n, sum; n = 1; sum = 0; while (n <= 100) { sum = sum + n; n = n + 1; } return 0; } ``` 編譯 ``` gcc -o main -g main.c ``` > 注意編譯需要加上 -g 才能用gdb 展示源碼 ``` > gdb main > layout // 展示源碼窗口 > l // 顯示源碼 > b n // 在第n行打斷點 > r // 執行 ``` ## 調試正在運行程序CPU過高 ``` > gdb (gdb) > attach <PID> // 指定CPU過高的進程 (gdb) > info threads // 查看所有此程序的線程 (gdb) > thread <thread_number> // 查看指定線程 (gdb) > bt // 查看堆棧信息 ``` 使用 bt 分析進程,這是一個手動的過程,需要您多次觀察程序并使用 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>

                              哎呀哎呀视频在线观看