一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

gdb動態(tài)調(diào)試演示

麥辣雞腿堡 ? 來源:嵌入式軟件那些事 ? 作者:靜以修身 ? 2023-11-01 15:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

#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;
}

為了不讓程序自動結(jié)束,我創(chuàng)建了一個線程,然后使用如下命令進(jìn)行編譯,生成帶調(diào)試信息的可執(zhí)行程序文件。

gcc -g -o main main.c -lpthread

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

圖片

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

gdb < 可執(zhí)行程序名 > < 進(jìn)程ID >


比如:gdb < 可執(zhí)行程序名 > 1234


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

從上面我們查到main進(jìn)程的PID為21310,直接執(zhí)行g(shù)db main 21310即可開啟main進(jìn)程的動態(tài)調(diào)試。

圖片

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

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

圖片

編譯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(需要交叉編譯,交叉編譯工具鏈換成對應(yīng)的即可)

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可執(zhí)行程序文件比較大(默認(rèn)是帶著調(diào)試信息的),可以用strip命令裁剪下即可,不影響使用!

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5152

    文章

    19675

    瀏覽量

    317611
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213828
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3826

    瀏覽量

    82996
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70751
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    QEMU+GDB調(diào)試ARM程序

    通過GDB調(diào)試代碼的便利性無需贅言。我們直接以調(diào)試meta-hypervisor為示例進(jìn)行說明。
    的頭像 發(fā)表于 10-08 09:17 ?3438次閱讀

    使用GDB調(diào)試Linux應(yīng)用程序

    本篇講解使用GDB調(diào)試Linux應(yīng)用程序,以下以 `hellowld.c` 為例介紹 GDB調(diào)試入門。
    發(fā)表于 06-27 15:48 ?591次閱讀

    使用OpenOCD調(diào)試DEMO_FX3_U3V_CAM01時出錯,是哪里的原因?

    我正試圖用 OCD 調(diào)試演示板,但出現(xiàn)了以下錯誤 Error in services launch sequence GDB prompt not read我按照《EzUsbSuite 用戶指南》第 3 章的要求進(jìn)行操作。 你知道我做錯了什么嗎?
    發(fā)表于 05-21 07:07

    ARM平臺如何玩轉(zhuǎn)GDB遠(yuǎn)程調(diào)試?

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

    GDB調(diào)試命令手冊

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

    gdb調(diào)試器解析

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

    Linux應(yīng)用的GDB調(diào)試的原理及過程分析

    GDB調(diào)試是應(yīng)用程序在開發(fā)板上運(yùn)行,然后在PC機(jī)上對開發(fā)板上得應(yīng)用程序進(jìn)行調(diào)試,PC機(jī)運(yùn)行GDB,開發(fā)板上運(yùn)行GDBServer。在應(yīng)用程序調(diào)試
    發(fā)表于 03-05 09:44 ?3585次閱讀
    Linux應(yīng)用的<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>的原理及過程分析

    實(shí)例演示GDB的使用

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

    OpenHarmony系統(tǒng)使用gdb調(diào)試init

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

    ARM平臺如何玩轉(zhuǎn)GDB遠(yuǎn)程調(diào)試?

    前言關(guān)于GDB工具GDB工具是GNU項(xiàng)目調(diào)試器,基于命令行使用。和其他的調(diào)試器一樣,可使用GDB工具單步運(yùn)行程序、單步執(zhí)行、跳入/跳出函數(shù)、
    的頭像 發(fā)表于 09-28 18:17 ?1273次閱讀
    ARM平臺如何玩轉(zhuǎn)<b class='flag-5'>GDB</b>遠(yuǎn)程<b class='flag-5'>調(diào)試</b>?

    在ubuntu中調(diào)試GDB

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

    GDB調(diào)試里怎么設(shè)置斷點(diǎn)

    本篇講解使用GDB調(diào)試Linux應(yīng)用程序,以下以 hellowld.c 為例介紹 GDB調(diào)試入門: 設(shè)置斷點(diǎn) ??disable?????????????????#?禁用所有斷點(diǎn)
    的頭像 發(fā)表于 10-04 16:10 ?1529次閱讀

    GDB調(diào)試工具的原理

    一、GDB調(diào)試工具的原理 1.1 未執(zhí)行進(jìn)程調(diào)試 啟用gdb調(diào)試運(yùn)行gdb ./test的時候,
    的頭像 發(fā)表于 11-09 17:04 ?1311次閱讀
    <b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>工具的原理

    如何使用GDB調(diào)試工具

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

    如何使用linux下gdb調(diào)試python程序

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