那曲檬骨新材料有限公司

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動態調試在不打斷程序運行的情況下,進行在線調測還是很有用的,一般在排查問題、動態改變程序執行邏輯、單元/集成測試等都可以使用,用起來非常的香!

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

    關注

    5094

    文章

    19178

    瀏覽量

    307732
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210415
  • 程序
    +關注

    關注

    117

    文章

    3796

    瀏覽量

    81419
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69063
收藏 人收藏

    評論

    相關推薦

    QEMU+GDB調試ARM程序

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

    使用GDB調試Linux應用程序

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

    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 ?3460次閱讀
    Linux應用的<b class='flag-5'>GDB</b><b class='flag-5'>調試</b>的原理及過程分析

    linux編程GDB調試功能

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

    實例演示GDB的使用

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

    OpenHarmony系統使用gdb調試init

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

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

    前言關于GDB工具GDB工具是GNU項目調試器,基于命令行使用。和其他的調試器一樣,可使用GDB工具單步運行程序、單步執行、跳入/跳出函數、
    的頭像 發表于 09-28 18:17 ?1044次閱讀
    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 ?1125次閱讀
    在ubuntu中<b class='flag-5'>調試</b><b class='flag-5'>GDB</b>

    GDB調試里怎么設置斷點

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

    GDB調試工具的原理

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

    如何使用GDB調試工具

    在對應程序目錄中使用下面的命令 gdb test 2、調試已經開始運行的程序進程 調試已經開始運行的程序進程,首先先用top命令查看運行的程序進程的pid如下: 比如我要加載的程序
    的頭像 發表于 11-09 17:17 ?911次閱讀
    如何使用<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 ?2740次閱讀
    百家乐龙虎| 合肥太阳城在哪| 百家乐官网单人操作扫描道具 | 百家乐园sun811| 百家乐官网娱乐下载| 玫瑰国际娱乐城| 百家乐澳门技巧| 免费百家乐官网计划软件| 百家乐官网真人游戏投注网 | 百家乐汝河路| 百家乐官网玩法简介| 大发888娱乐城手机版| 闲和庄百家乐娱乐平台| 阴宅风水24山分金| 哪个百家乐官网技巧平台信誉好| 六合彩图库| 大发88817| 百家乐红桌布| 娱乐城百家乐送白菜| 免费百家乐官网过滤| A8百家乐官网娱乐| 真人百家乐官网攻略| 百家乐官网小游戏开发| 崇左市| 大发888卡| 全讯网新2网址| 百家乐赌场筹码| 百家乐代理每周返佣| 转载24山五行相克| 大佬百家乐官网娱乐城| 嘉禾百家乐官网的玩法技巧和规则 | 免费百家乐官网平预测软件| 678百家乐官网博彩娱乐平台| 百家乐官网导航网| 百家乐官网视频无法显示| 加州百家乐官网娱乐城| 百家乐官网投注平台| 定州市| 真人百家乐官网在线玩| 百家乐官网游戏软件开发| 百家乐官网对子计算方法|