<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    gdb常用調試命令以及多線程堆棧的查看

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    GDB是GNU開源組織發布的一個強大的UNIX下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像VC、BCB等IDE的調試,但如果你是在UNIX平臺下做軟件,你會發現GDB這個調試工具有比VC、BCB的圖形化調試器更強大的功能。所謂“寸有所長,尺有所短”就是這個道理。

    一般來說GDB主要調試的是C/C++的程序。要調試C/C++的程序,首先在編譯時,我們必須要把調試信息加到可執行文件中。使用編譯器(cc/gcc/g++)的 -g 參數可以做到這一點。如:

     

        > cc -g hello.c -o hello
        > g++ -g hello.cpp -o hello

    gdb +程序名  運行(gdb main)

    使用 "--tui" 參數,可以在終端窗口上部顯示一個源代碼查看窗。

    gdb --tui main

     

    list(l) 查看最近10行源碼

    list fun 查看fun函數源碼

    list file:fun 查看file文件中的fun函數源碼

    list num1 num2 查看num1~num2行的源碼

     

    break 行號

    break fun 在函數處設置斷點

    break file:行號 

    break file:fun

    break if <condition> 條件成立時程序停住

    info break (i b)查看斷點

    watch expr 當expr的值發生改變時,程序停住

    delete  n  刪除斷點

     

    run/r 啟動程序

    continue(c) 運行至下一個斷點

    step(s) 單步跟蹤,進入函數

    next(n) 單步跟蹤,不進入函數

    finish 運行程序,直到當前函數完成返回,并打印函數返回時的堆棧地址和返回值及參數信息

    until 運行程序直到程序退出循環體

    print i (p i) 查看變量的值

    ptype 查看變量類型

    print array 查看數組

    print *array@len 查看動態內存

    print x=5 改變運行時的數據

    print &array 查看數組的地址

    回車代表上一個命令

     

    core文件

    在程序崩潰時,一般會生成一個文件叫core文件。core文件記錄的是程序崩潰時的內存映像,并加入調試信息。core文件生成的過程叫做core dump

    設置生成core文件

    ulimit -c 查看core-dump狀態

    ulimit -c 數字 

    ulimit -c unlimited 

    gdb利用core文件調試

    gdb 文件名 core文件

    Backtrace(bt)   查看堆棧

     

    多線程調試

    info threads 顯示當前可調試的所有線程

    thread ID 切換當前調試的線程為指定ID的線程

    attach process-id 在gdb狀態下,開始調試一個正在運行的進程

    thread apply all command 所有線程執行command

    下面給大家一個好玩的多線程程序,答案就在某個線程的堆棧中,先不要看下面的答案,自己試著用gdb玩一下哈(Linux 64bit)。

    http://download.csdn.net/detail/nk_test/9452236

    答案在下面圖中,先不要看。。

    RFID設備管理軟件

    RFID設備管理軟件

    The answer is orangutan.

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全