精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

gdb動態調試演示

麥辣雞腿堡 ? 來源:嵌入式軟件那些事 ? 作者:靜以修身 ? 2023-11-01 15:28 ? 次閱讀

今天要分享給大家的是gdb動態調試( 動態調試就是在不終止正在運行的進程的情況下,來對這個正在運行的進程進行調試,我一般習慣稱之為在線調試 )在平時開發Linux應用程序時,不管是桌面Linux應用開發,還是嵌入式Linux應用開發,在我們接到新需求開始擼代碼的時候(一般這時候都是在公司編碼測試,可以運行帶調試信息的debug版程序),都可以使用該技能進行代碼的調測,簡單實用。

為了給大家演示方便,我簡單寫了個測試程序,代碼如下:

#include < stdio.h >
#include < pthread.h >


typedef struct
{
    int a;
    char b;
    char *c;
} TEST;


int data;
TEST test;


int fun(void)
{
    printf("global variable data = %dn", data);
}


int fun2(int val)
{
    data = val;
    printf("set global variable data = %dn", data);
}


void *thread()
{
    while(1)
    {
        //printf("thread is runningn");
        sleep(1);
    }
}


int main(int argc, char *argv[])
{
    pthread_t tid;


    data = 100;

    test.a = 10;
    test.b = 'a';
    test.c = "hello world";


    pthread_create(&tid, NULL, thread, NULL);

    pause();


    return 1;
}

為了不讓程序自動結束,我創建了一個線程,然后使用如下命令進行編譯,生成帶調試信息的可執行程序文件。

gcc -g -o main main.c -lpthread

使用&符號,讓程序在后臺運行,記下程序的進程號PID(或者使用ps -e | grep main命令查詢):

圖片

gdb動態調試有多種使用方式,感興趣的小伙伴可以直接找度娘搜索下,下面是最常用的一種方式:

gdb < 可執行程序名 > < 進程ID >


比如:gdb < 可執行程序名 > 1234


這條命令會把進程ID為1234的進程與gdb聯系起來,也就是說,這條命令會把進程ID為1234的進程的地址空間附著在gdb的地址空間中,然后使這個進程在gdb的環境下運行,這樣的話,gdb就可以清楚地了解該進程的執行情況、函數堆棧、內存使用情況等等。

從上面我們查到main進程的PID為21310,直接執行gdb main 21310即可開啟main進程的動態調試。

圖片

這時候我們借助強大的gdb可以做的事情就非常多了:

  • 查看某個全局變量的值(gdb的print命令顯示結構體變量是非常的nice)
  • 修改某個全局變量的值(也可以單獨修改結構體變量的某個成員)
  • 直接執行某個函數(無參函數、有參函數都可以)
  • 設置斷點
  • ......
    以上這些常用的功能基本可以滿足我們的調試需求,使用效果如下:

圖片

編譯x86電腦上用的gdb

cd /home/tools/gdb/gdb-8.2
mkdir build
cd build
../configure --prefix=/home/tools/gdb/gdb_install_x86/
make && make install

編譯arm終端上用的gdb(需要交叉編譯,交叉編譯工具鏈換成對應的即可)

cd /home/tools/gdb/gdb-8.2
mkdir build
cd build
../configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc CPP=arm-linux-gnueabihf-cpp CXX=arm-linux-gnueabihf-g++ --prefix=/home/tools/gdb/gdb_install_arm/
make && make install

另外,如果感覺生成的gdb可執行程序文件比較大(默認是帶著調試信息的),可以用strip命令裁剪下即可,不影響使用!

好了,今天就先寫到這吧,gdb動態調試在不打斷程序運行的情況下,進行在線調測還是很有用的,一般在排查問題、動態改變程序執行邏輯、單元/集成測試等都可以使用,用起來非常的香!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5046

    文章

    18821

    瀏覽量

    298627
  • Linux
    +關注

    關注

    87

    文章

    11123

    瀏覽量

    207921
  • 程序
    +關注

    關注

    115

    文章

    3720

    瀏覽量

    80361
  • 代碼
    +關注

    關注

    30

    文章

    4671

    瀏覽量

    67771
收藏 人收藏

    評論

    相關推薦

    QEMU+GDB調試ARM程序

    通過GDB調試代碼的便利性無需贅言。我們直接以調試meta-hypervisor為示例進行說明。
    的頭像 發表于 10-08 09:17 ?2687次閱讀

    使用GDB調試Linux應用程序

    本篇講解使用GDB調試Linux應用程序,以下以 `hellowld.c` 為例介紹 GDB調試入門。
    發表于 06-27 15:48 ?411次閱讀

    ARM平臺如何玩轉GDB遠程調試

    搭建正常,執行如下命令可查看交叉編譯工具版本。Host# aarch64-poky-linux-gcc -v圖 22 演示程序創建與編譯執行如下命令,新建一個GDB調試演示程序。Host# mkdir
    發表于 09-27 15:28

    GDB調試命令手冊

    GDB調試命令手冊,感興趣的可以下載看看。
    發表于 11-05 16:36 ?9次下載

    gdb調試器解析

    3.4 gdb調試調試是所有程序員都會面臨的問題。如何提高程序員的調試效率,更好、更快地定位程序中的問題從而加快程序開發的進度,是大家都很關注的問題。就如讀者熟知的Windows下
    發表于 10-18 13:49 ?1次下載

    Linux應用的GDB調試的原理及過程分析

    GDB調試是應用程序在開發板上運行,然后在PC機上對開發板上得應用程序進行調試,PC機運行GDB,開發板上運行GDBServer。在應用程序調試
    發表于 03-05 09:44 ?3333次閱讀
    Linux應用的<b class='flag-5'>GDB</b><b class='flag-5'>調試</b>的原理及過程分析

    linux編程GDB調試功能

    GDB是一套字符界面的程序集,可以用它在linux上調試C和C++程序,它提供了以下的功能:
    的頭像 發表于 05-05 23:49 ?2145次閱讀
    linux編程<b class='flag-5'>GDB</b><b class='flag-5'>調試</b>功能

    實例演示GDB的使用

    GDB簡介 GDB(GNU Debugger)是一個強大的命令行調試工具。一般的,在Windows下進行開發,很少操控命令行調試調試器大多
    的頭像 發表于 10-19 09:58 ?2549次閱讀
    實例<b class='flag-5'>演示</b><b class='flag-5'>GDB</b>的使用

    OpenHarmony系統使用gdb調試init

    。如果能使用gdb調試init,會極大的提高定位效率。 本文簡單描述了一下L2二次啟動的系統如何使用gdb調試init 首先將gdb打包到系
    的頭像 發表于 12-26 12:10 ?810次閱讀

    ARM平臺如何玩轉GDB遠程調試

    前言關于GDB工具GDB工具是GNU項目調試器,基于命令行使用。和其他的調試器一樣,可使用GDB工具單步運行程序、單步執行、跳入/跳出函數、
    的頭像 發表于 09-28 18:17 ?840次閱讀
    ARM平臺如何玩轉<b class='flag-5'>GDB</b>遠程<b class='flag-5'>調試</b>?

    在ubuntu中調試GDB

    的 gcc 編譯器即可,注意需要加 -g 選項,才能使用 gdb 調試 arm-linux-gnueabihf-gcc gdbtest .c -o gdbtest -g //編譯測試程序,注意-g 選項
    的頭像 發表于 07-27 16:31 ?893次閱讀
    在ubuntu中<b class='flag-5'>調試</b><b class='flag-5'>GDB</b>

    GDB調試里怎么設置斷點

    本篇講解使用GDB調試Linux應用程序,以下以 hellowld.c 為例介紹 GDB調試入門: 設置斷點 ??disable?????????????????#?禁用所有斷點
    的頭像 發表于 10-04 16:10 ?1028次閱讀

    GDB調試工具的原理

    一、GDB調試工具的原理 1.1 未執行進程調試 啟用gdb調試運行gdb ./test的時候,
    的頭像 發表于 11-09 17:04 ?686次閱讀
    <b class='flag-5'>GDB</b><b class='flag-5'>調試</b>工具的原理

    如何使用GDB調試工具

    在對應程序目錄中使用下面的命令 gdb test 2、調試已經開始運行的程序進程 調試已經開始運行的程序進程,首先先用top命令查看運行的程序進程的pid如下: 比如我要加載的程序
    的頭像 發表于 11-09 17:17 ?612次閱讀
    如何使用<b class='flag-5'>GDB</b><b class='flag-5'>調試</b>工具

    如何使用linux下gdb調試python程序

    如何使用linux下gdb調試python程序? 在Linux下,可以使用GDB(GNU調試器)來調試Python程序。
    的頭像 發表于 01-31 10:41 ?1969次閱讀