国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

arm環(huán)境使用GDB調(diào)試

這篇具有很好參考價(jià)值的文章主要介紹了arm環(huán)境使用GDB調(diào)試。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

????????調(diào)試設(shè)備代碼的時(shí)候,經(jīng)常碰到程序異?;蛘吖δ軐?duì)不上,以前這種時(shí)候就是加打印消息,然后重新編譯把程序放進(jìn)去跑,通過打印消息來判斷代碼出問題的點(diǎn)在哪里,但是有的時(shí)候可能需要反復(fù)加多次才能定位到問題點(diǎn),而使用gdb調(diào)試就可以很快找到問題,非常效率,雖然GDB調(diào)試的文章已經(jīng)很多了,但還是想寫寫來記錄一下。

前期工作

????????我使用的是主機(jī)端使用gdb,設(shè)備端使用gdbserver的方式去調(diào)試,所以需要在先編譯一個(gè)arm版本的gdbserver

我所使用的編譯器:arm-linux-gnueabihf-gcc

gdb源碼版本:gdb-8.3

編譯生成的程序我已經(jīng)上傳到我的gitee,如果不想編譯的話可以直接下載我的用

arm環(huán)境GDB調(diào)試: arm環(huán)境下使用gdb調(diào)試 (gitee.com)

gdbserver編譯

? ? ? ? 只需要交叉編譯gdbserver即可,因?yàn)橐话隳惆惭b的arm編譯器是帶gdb的,可以查看你的交叉編譯器選項(xiàng),就會(huì)發(fā)現(xiàn)一般有arm-linux-gnueabihf-gdb這個(gè)程序,當(dāng)然你也可以重新編譯一個(gè)arm版本的gdb,這個(gè)不影響,我實(shí)測(cè)下來,都可以使用。

arm環(huán)境使用GDB調(diào)試,arm開發(fā),linux,ubuntu

進(jìn)入源碼目錄,再到gdb-8.3/gdb/gdbserve這個(gè)目錄下,打開終端,輸入命令裁剪

./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf  --prefix=/opt/gdb/gdbserver-lib
# --host:該軟件將運(yùn)行的平臺(tái),填你的交叉編譯器
# --target:該軟件所處理的目標(biāo)平臺(tái),填你的交叉編譯器
# --prefix:目標(biāo)文件生成路徑

裁剪完后直接編譯安裝

make 
make install

最后會(huì)在指定目錄下生成程序

arm環(huán)境使用GDB調(diào)試,arm開發(fā),linux,ubuntu

把這個(gè)程序放到arm開發(fā)板,如果覺得程序太大了的話,可以執(zhí)行strip命令,減小程序大小

arm-linux-gnueabihf-strip arm-linux-gnueabihf-gdbserver

GDB調(diào)試

我們寫一段程序測(cè)試一下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char buf[] = "hello world";
	char data[100];
	char *data2;
	
	for(int i = 0; i < strlen(buf); i++)
		data[i] = buf[i];
	
	printf("data:%s\n", data);
	
	strcpy(data2, data);
	
	printf("data2:%s\n", data2);
	
	return 0;
}

用arm編譯器編譯,注意編譯的時(shí)候加上-g,支持gdb調(diào)試

arm-linux-gnueabihf-gcc -o gdbtest test.c -g

接著放到arm開發(fā)板使用gdbserver運(yùn)行

# 執(zhí)行命令格式為./gdbserver :端口號(hào) 程序
./gdbserver :1234 gdbtest

arm環(huán)境使用GDB調(diào)試,arm開發(fā),linux,ubuntu

然后在主機(jī)先執(zhí)行命令

arm-linux-gnueabihf-gdb -tui
# -tui 在GDB調(diào)試中顯示源代碼

?進(jìn)入gdb后,輸入指令連接開發(fā)板

# 格式 target remote 開發(fā)板ip:端口號(hào)(端口號(hào)需一致)
target remote 10.10.10.174:1234

arm環(huán)境使用GDB調(diào)試,arm開發(fā),linux,ubuntu

這時(shí)候就可以查看源碼打斷點(diǎn)進(jìn)行調(diào)試了

arm環(huán)境使用GDB調(diào)試,arm開發(fā),linux,ubuntu

輸入c直接運(yùn)行,可以看到程序此時(shí)發(fā)生了段錯(cuò)誤,所以如果實(shí)際中編程程序掛掉的話,可以先打斷點(diǎn),然后在單步執(zhí)行,很快就能定位到段錯(cuò)誤的位置。

GDB調(diào)試core文件

一般情況下,在開發(fā)階段正常,但是在測(cè)試的時(shí)候程序就可能掛掉,但是不可能一直開著gdbserver去跑,而且問題不一定好復(fù)現(xiàn),這個(gè)時(shí)候就要靠core文件去定位問題點(diǎn)了,在運(yùn)行程序前設(shè)置core文件

ulimit -c unlimited
# 設(shè)置進(jìn)程生成core文件的大小限制。將其設(shè)置為 "unlimited" 表示不限制core文件的大小,即進(jìn)程崩潰時(shí)可以生成任意大小的core文件
echo '/tmp/core.%e.%p.%t' | tee /proc/sys/kernel/core_pattern
# 生成的core文件會(huì)保存在 /tmp 目錄下,并以 "core.可執(zhí)行文件名.進(jìn)程ID.時(shí)間戳" 的格式命名。

然后直接執(zhí)行執(zhí)行程序

arm環(huán)境使用GDB調(diào)試,arm開發(fā),linux,ubuntu

可以看到,在我指定的目錄下,生成了core文件,把這個(gè)core文件拷貝到主機(jī),然后執(zhí)行命令

arm-linux-gnueabihf-gdb gdbtest core.gdbtest.6934.1705905673

然后使用bt命令就可看到段錯(cuò)誤的位置了

arm環(huán)境使用GDB調(diào)試,arm開發(fā),linux,ubuntu

這樣就可以迅速定位到問題點(diǎn)了。

總結(jié)

????????GDB調(diào)試是一個(gè)很強(qiáng)大的工具,這里只是簡(jiǎn)單的講了一下gdb的用法,還有很多功能,本人也還在繼續(xù)學(xué)習(xí)使用。

? ? ? ? 希望我的文章可以幫助到你?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-824044.html

到了這里,關(guān)于arm環(huán)境使用GDB調(diào)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Linux之基礎(chǔ)開發(fā)工具gdb調(diào)試器的使用(三)

    Linux之基礎(chǔ)開發(fā)工具gdb調(diào)試器的使用(三)

    ??北塵_ :個(gè)人主頁(yè) ??個(gè)人專欄 :《Linux操作系統(tǒng)》《經(jīng)典算法試題 》《C++》 《數(shù)據(jù)結(jié)構(gòu)與算法》 ??走在路上,不忘來時(shí)的初心 yum install -y gdb 程序的發(fā)布方式有兩種,debug模式和release模式 Linux gcc/g++出來的二進(jìn)制程序,默認(rèn)是release模式,release模式下無法調(diào)試 要使用gd

    2024年02月05日
    瀏覽(22)
  • 【問題記錄】Ubuntu 22.04 環(huán)境下,程序報(bào):段錯(cuò)誤(核心已轉(zhuǎn)儲(chǔ))怎么使用 core 文件和GDB調(diào)試器 解決?

    【問題記錄】Ubuntu 22.04 環(huán)境下,程序報(bào):段錯(cuò)誤(核心已轉(zhuǎn)儲(chǔ))怎么使用 core 文件和GDB調(diào)試器 解決?

    目錄 環(huán)境 問題情況 解決思路 原因分析 解決方法 番外知識(shí) VMware? Workstation 16 Pro (版本:16.1.2 build-17966106) ubuntu-22.04.2-desktop-amd64 本人在運(yùn)行百萬并發(fā)的服務(wù)端程序時(shí),程序運(yùn)行報(bào): 段錯(cuò)誤(核心已轉(zhuǎn)儲(chǔ)) ,導(dǎo)致程序異常退出,如下 首先要確定核心轉(zhuǎn)儲(chǔ)文件的生成路徑和

    2024年02月06日
    瀏覽(21)
  • Linux環(huán)境下gdb調(diào)試方法與演示

    Linux環(huán)境下gdb調(diào)試方法與演示

    個(gè)人主頁(yè):兜里有顆棉花糖 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【Linux專欄】?? 本專欄旨在分享學(xué)習(xí)Linux的一點(diǎn)學(xué)習(xí)心得,歡迎大家在評(píng)論區(qū)討論?? 演示環(huán)境: centos7 如果還未安裝gdb的話,輸入下面命令進(jìn)行安裝即可: 首先,gd

    2024年02月07日
    瀏覽(40)
  • ubuntu22上使用qemu-system-arm調(diào)試linux

    qemu是用軟件模擬硬件解析指令運(yùn)行的軟件,可以模擬arm、arm64、x86等,對(duì)于調(diào)試linux 內(nèi)核機(jī)制很方便,不用額外購(gòu)買開發(fā)板。由于linux上有對(duì)qemu的加速引擎,支持程度更高,且網(wǎng)絡(luò)上教程居多,所以這里使用virtualbox+ubuntu22虛擬機(jī),在ubuntu上運(yùn)行qemu進(jìn)行模擬。 virtualbox安裝:

    2024年01月25日
    瀏覽(20)
  • Linux開發(fā)工具之調(diào)試器gdb

    程序的發(fā)布方式有兩種,debug模式和release模式 Linux gcc/g++出來的二進(jìn)制程序,默認(rèn)是release模式 要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時(shí)候, 加上 -g 選項(xiàng) ? 所以一份代碼若要被調(diào)試必須是debug模式,但是在linux下我們編譯代碼的時(shí)候默認(rèn)為release模式,要想讓我們的代碼

    2024年02月07日
    瀏覽(22)
  • [linux開發(fā)工具]小程序--進(jìn)度條、調(diào)試器 - gdb

    [linux開發(fā)工具]小程序--進(jìn)度條、調(diào)試器 - gdb

    ?? 作者簡(jiǎn)介 :RO-BERRY ?? 學(xué)習(xí)方向:致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫(kù)等等一系列知識(shí) ?? 日后方向 : 偏向于CPP開發(fā)以及大數(shù)據(jù)方向,歡迎各位關(guān)注,謝謝各位的支持 第一種情況 執(zhí)行結(jié)果如下: 可以看到程序先執(zhí)行printf再執(zhí)行sleep 第二種情況 執(zhí)行結(jié)果如下: 在這里

    2024年02月22日
    瀏覽(21)
  • 【Linux】Linux調(diào)試器-gdb使用

    【Linux】Linux調(diào)試器-gdb使用

    程序的發(fā)布方式有兩種,debug模式和release模式 Linux gcc/g++出來的二進(jìn)制程序,默認(rèn)是release模式 要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時(shí)候, 加上 -g 選項(xiàng) 退出:? 調(diào)試命令: list/l 行號(hào):顯示binFile源代碼,接著上次的位置往下列,每次列10行。 list/l 函數(shù)名:列出某

    2024年02月21日
    瀏覽(27)
  • 【Linux】gdb調(diào)試器的使用

    【Linux】gdb調(diào)試器的使用

    文章目錄 一、gdb簡(jiǎn)介 二、調(diào)試前的準(zhǔn)備 1、生成調(diào)試文件 2、啟動(dòng) gdb? 三、gdb 使用方法? 1、查看源代碼 2、設(shè)置 / 查看斷點(diǎn)(多種方式設(shè)置斷點(diǎn)) 方法一 方法二 方法三 3、run? 4、刪除斷點(diǎn)、斷點(diǎn)無效 5、逐過程調(diào)試(以函數(shù)為單位) 6、逐語(yǔ)句調(diào)試 7、查看調(diào)用鏈 8、查看變

    2024年02月02日
    瀏覽(35)
  • 【Linux】——調(diào)試器-gdb的使用

    【Linux】——調(diào)試器-gdb的使用

    序言: 本期,我將帶領(lǐng)大家學(xué)習(xí)的關(guān)于linux下的 調(diào)試器gdb 的使用,廢話不多說跟著我一起去看看吧??! 目錄 前言 (一)背景介紹 1、debug模式和release模式 2、為什么Release不能調(diào)試但DeBug可以調(diào)試 3、初步見識(shí) 1??readelf (二)調(diào)試代碼 1、命名大全 2、具體演示 0??行號(hào)顯

    2024年02月07日
    瀏覽(23)
  • Linux 使用gdb調(diào)試C程序

    Linux 使用gdb調(diào)試C程序

    一、gdb的一些基礎(chǔ)命令 l :顯示代碼 l n :跳轉(zhuǎn)到當(dāng)前代碼頁(yè)的第n行的代碼 l filename.c :n :跳轉(zhuǎn)到filename.c文件的第n行代碼 b 行號(hào) :加斷點(diǎn) info break :查看斷點(diǎn)信息 delete 斷點(diǎn)編號(hào) :刪除斷點(diǎn) r ,運(yùn)行程序 n ,單步執(zhí)行 c ,繼續(xù)執(zhí)行,遇到斷點(diǎn)停止執(zhí)行 p ,打印 s ,進(jìn)入函數(shù)

    2024年02月13日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包