欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

gdb調(diào)試linux命令,linux使用gdb調(diào)試

linux gdb基礎(chǔ)命令

你的gdb壓根就沒有解析出來斷點(diǎn),你的庫有問題。你run后bt一下就可以進(jìn)入斷點(diǎn)的

網(wǎng)站設(shè)計(jì)制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);成都做網(wǎng)站、網(wǎng)站制作收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營了10多年的創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司。

你把代碼發(fā)我吧,給你調(diào)試

linux中 怎么使用gdb調(diào)試程序

gdb是用來調(diào)試二進(jìn)制程序的,不能調(diào)試python腳本。 python自帶pdb模塊,可以用來調(diào)試自己的腳本。 使用python -m pdb ,交互方式,命令與gdb類似。

Break的Linux下GDB調(diào)試

作用:設(shè)置斷點(diǎn)(BreakPoint)

我們使用break命令來設(shè)置斷點(diǎn),break在進(jìn)入指定函數(shù)時(shí)停住。C++中能使用class::function或function(type,type)格式來指定函數(shù)名。

break

在指定行號停住。

break +offset

break -offset

在當(dāng)前行號的前面或后面的offset行停住。offiset為自然數(shù)。

break filename:linenum

在源文件filename的linenum行處停住。

break filename:function

在源文件filename的function函數(shù)的入口處停住。

break *address

在程式運(yùn)行的內(nèi)存地址處停住。

break

break命令沒有參數(shù)時(shí),表示在下一條指令處停住。

break…if

…能是上述的參數(shù),condition表示條件,在條件成立時(shí)停住。比如在循環(huán)境體中,能設(shè)置break if i=100,表示當(dāng)i為100時(shí)停住程式。

查看斷點(diǎn)時(shí),可使用info命令,如下所示:(注:n表示斷點(diǎn)號)

info breakpoints [n]

info break [n]

linux中怎么使用gdb調(diào)試進(jìn)程有dettach

在2.5.60版Linux內(nèi)核及以后,GDB對使用fork/vfork創(chuàng)建子進(jìn)程的程序提供了follow-fork-mode選項(xiàng)來支持多進(jìn)程調(diào)試。follow-fork-mode的用法為:set follow-fork-mode [parentchild]parent: fork之后繼續(xù)調(diào)試父進(jìn)程,子進(jìn)程不受影響。 child: fork之后調(diào)試子進(jìn)程,父進(jìn)程不受影響。 因此如果需要調(diào)試子進(jìn)程,在啟動(dòng)gdb后:(gdb) set follow-fork-mode child并在子進(jìn)程代碼設(shè)置斷點(diǎn)。此外還有detach-on-fork參數(shù),指示GDB在fork之后是否斷開(detach)某個(gè)進(jìn)程的調(diào)試,或者都交由GDB控制:set detach-on-fork [onoff]on: 斷開調(diào)試follow-fork-mode指定的進(jìn)程。 off: gdb將控制父進(jìn)程和子進(jìn)程。follow-fork-mode指定的進(jìn)程將被調(diào)試,另一個(gè)進(jìn)程置于暫停(suspended)狀態(tài)。 注意,最好使用GDB 6.6或以上版本,如果你使用的是GDB6.4,就只有follow-fork-mode模式。follow-fork-mode/detach-on-fork的使用還是比較簡單的,但由于其系統(tǒng)內(nèi)核/gdb版本限制,我們只能在符合要求的系統(tǒng)上才能使用。而且,由于follow-fork-mode的調(diào)試必然是從父進(jìn)程開始的,對于fork多次,以至于出現(xiàn)孫進(jìn)程或曾孫進(jìn)程的系統(tǒng),例如上圖3進(jìn)程系統(tǒng),調(diào)試起來并不方便。Attach子進(jìn)程 眾所周知,GDB有附著(attach)到正在運(yùn)行的進(jìn)程的功能,即attach pid命令。因此我們可以利用該命令attach到子進(jìn)程然后進(jìn)行調(diào)試。例如我們要調(diào)試某個(gè)進(jìn)程RIM_Oracle_Agent.9i,首先得到該進(jìn)程的pid[root@tivf09 tianq]# ps -efgrep RIM_Oracle_Agent.9i nobody 6722 6721 0 05:57 ? 00:00:00 RIM_Oracle_Agent.9i root 7541 27816 0 06:10 pts/3 00:00:00 grep -i rim_oracle_agent.9i通過pstree可以看到,這是一個(gè)三進(jìn)程系統(tǒng),oserv是RIM_Oracle_prog的父進(jìn)程,RIM_Oracle_prog又是RIM_Oracle_Agent.9i的父進(jìn)程。[root@tivf09 root]# pstree -H 6722通過 pstree 察看進(jìn)程啟動(dòng)GDB,attach到該進(jìn)程用 GDB 連接進(jìn)程現(xiàn)在就可以調(diào)試了。一個(gè)新的問題是,子進(jìn)程一直在運(yùn)行,attach上去后都不知道運(yùn)行到哪里了。有沒有辦法解決呢?一個(gè)辦法是,在要調(diào)試的子進(jìn)程初始代碼中,比如main函數(shù)開始處,加入一段特殊代碼,使子進(jìn)程在某個(gè)條件成立時(shí)便循環(huán)睡眠等待,attach到進(jìn)程后在該代碼段后設(shè)上斷點(diǎn),再把成立的條件取消,使代碼可以繼續(xù)執(zhí)行下去。至于這段代碼所采用的條件,看你的偏好了。比如我們可以檢查一個(gè)指定的環(huán)境變量的值,或者檢查一個(gè)特定的文件存不存在。以文件為例,其形式可以如下:void debug_wait(char *tag_file) { while(1) { if (tag_file存在) 睡眠一段時(shí)間; else break; } }當(dāng)attach到進(jìn)程后,在該段代碼之后設(shè)上斷點(diǎn),再把該文件刪除就OK了。當(dāng)然你也可以采用其他的條件或形式,只要這個(gè)條件可以設(shè)置/檢測即可。Attach進(jìn)程方法還是很方便的,它能夠應(yīng)付各種各樣復(fù)雜的進(jìn)程系統(tǒng),比如孫子/曾孫進(jìn)程,比如守護(hù)進(jìn)程(daemon process),唯一需要的就是加入一小段代碼。GDB wrapper 很多時(shí)候,父進(jìn)程 fork 出子進(jìn)程,子進(jìn)程會(huì)緊接著調(diào)用 exec族函數(shù)來執(zhí)行新的代碼。對于這種情況,我們也可以使用gdb wrapper 方法。它的優(yōu)點(diǎn)是不用添加額外代碼。其基本原理是以gdb調(diào)用待執(zhí)行代碼作為一個(gè)新的整體來被exec函數(shù)執(zhí)行,使得待執(zhí)行代碼始終處于gdb的控制中,這樣我們自然能夠調(diào)試該子進(jìn)程代碼。還是上面那個(gè)例子,RIM_Oracle_prog fork出子進(jìn)程后將緊接著執(zhí)行RIM_Oracle_Agent.9i的二進(jìn)制代碼文件。我們將該文件重命名為RIM_Oracle_Agent.9i.binary,并新建一個(gè)名為RIM_Oracle_Agent.9i的shell腳本文件,其內(nèi)容如下:[root@tivf09 bin]# mv RIM_Oracle_Agent.9i RIM_Oracle_Agent.9i.binary [root@tivf09 bin]# cat RIM_Oracle_Agent.9i #!/bin/sh gdb RIM_Oracle_Agent.binary當(dāng)fork的子進(jìn)程執(zhí)行名為RIM_Oracle_Agent.9i的文件時(shí),gdb會(huì)被首先啟動(dòng),使得要調(diào)試的代碼處于gdb控制之下。

[Linux]gdb查看內(nèi)存區(qū)命令

GNU調(diào)試器(GNU Debugger, GDB)是一個(gè)開源的源代碼級的調(diào)試工具,其性能優(yōu)良、功能齊全、易于使用,在嵌入式系統(tǒng)開發(fā)過程中扮演著越來越重要的角色。接下來是我為大家收集的[Linux]gdb查看內(nèi)存區(qū)命令,希望能幫到大家。

[Linux]gdb查看內(nèi)存區(qū)命令

用gdb查看內(nèi)存

格式: x /nfu

說明

x 是 examine 的縮寫

n表示要顯示的內(nèi)存單元的個(gè)數(shù)

f表示顯示方式, 可取如下值

x 按十六進(jìn)制格式顯示變量。

d 按十進(jìn)制格式顯示變量。

u 按十進(jìn)制格式顯示無符號整型。

o 按八進(jìn)制格式顯示變量。

t 按二進(jìn)制格式顯示變量。

a 按十六進(jìn)制格式顯示變量。

i 指令地址格式

c 按字符格式顯示變量。

f 按浮點(diǎn)數(shù)格式顯示變量。

u表示一個(gè)地址單元的長度

b表示單字節(jié),

h表示雙字節(jié),

w表示四字節(jié),

g表示八字節(jié)

Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),

t(binary), f(float), a(address), i(instruction), c(char) and s(string).

Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes)

舉例

x/3uh buf

表示從內(nèi)存地址buf讀取內(nèi)容,

h表示以雙字節(jié)為一個(gè)單位,

3表示三個(gè)單位,

u表示按十六進(jìn)制顯示

例子:

n是個(gè)局部變量

Breakpoint 1, main (argc=1, argv=0xbffff3a4) at calc.c:7

7 int n = atoi(argv[1]);

(gdb) print n

$1 = (int *) 0xbffff2ec

(gdb) x 0xbffff2ec

0xbffff2ec: 0x00282ff4

(gdb) print * (int *) 0xbffff2ec

$2 = 2633716

(gdb) x /4xw 0xbffff2ec

0xbffff2ec: 0x00282ff4 0x080484e0 0x00000000 0xbffff378

(gdb) x /4dw 0xbffff2ec

0xbffff2ec: 2633716 134513888 0 -1073745032

(gdb)

看了“[Linux]gdb查看內(nèi)存區(qū)命令”還想看:

1. Linux使用dmidecode命令查看內(nèi)存型號

2. Linux下查看CPU型號,內(nèi)存大小,硬盤空間命令

3. 如何在Linux命令行中查看目錄的大小

4. LINUX 查看硬件配置命令的教程

使用GNU/gdb調(diào)試Linux C/C++可執(zhí)行程序查看出錯(cuò)源代碼、設(shè)置斷點(diǎn)

gdb是GNU開源組織發(fā)布的一個(gè)強(qiáng)大的Linux程序調(diào)試工具,比圖形化的調(diào)試工具更強(qiáng)大,主要來調(diào)試C/C++語言程序。

Debug 版本的可執(zhí)行程序包含調(diào)試信息,用于程序員調(diào)試程序。

Release 版本的可執(zhí)行程序往往是進(jìn)行了各種優(yōu)化,使得程序在代碼大小和運(yùn)行速度上都是最優(yōu)的,以方便用戶使用。

用gcc/g++編譯時(shí),要加上-g選項(xiàng)生成debug版本的可執(zhí)行程序,否則就無法使用gdb調(diào)試了。

r 表示開始run, 如果在運(yùn)行的過程中發(fā)生了錯(cuò)誤,比如segmentation fault,可以查看此時(shí)的出錯(cuò)源代碼:

通過b或者break設(shè)置斷點(diǎn),斷點(diǎn)的設(shè)置可以通過函數(shù)名、行號、文件名+函數(shù)名、文件名+行號以及偏移量、地址等進(jìn)行設(shè)置。

比如在function Peer_auto_save上設(shè)置斷點(diǎn),在peer.c的第136行設(shè)置斷點(diǎn):

從斷點(diǎn)處繼續(xù)運(yùn)行

退出gdb

網(wǎng)頁名稱:gdb調(diào)試linux命令,linux使用gdb調(diào)試
文章起源:http://chinadenli.net/article46/heopeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊企業(yè)網(wǎng)站制作全網(wǎng)營銷推廣面包屑導(dǎo)航商城網(wǎng)站定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)