導航:首頁 > 程序命令 > linux虛擬機gdb調試命令

linux虛擬機gdb調試命令

發布時間:2022-06-30 21:34:27

1. linux下gdb調試的幾個簡單命令

和在IDE上差不多,無非是單步 繼續 斷點之類的
list列出代碼
run運行
step單步
break斷點
watch查看變數
。。。。

2. linux中 怎麼使用gdb調試程序

gdb是用來調試二進製程序的,不能調試python腳本。 python自帶pdb模塊,可以用來調試自己的腳本。 使用python -m pdb ,交互方式,命令與gdb類似。

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

(1)假設要debug的進程號為1000,運行如下命令:
$ gdb -p 1000
使用此命令即可使gdb附加到進程。
(2)載入libpython腳本
如果你的gdb是redhat或fedora等廠商修改過的,會有--python選項,使用此選項即可指定gdb啟動時載入的Python擴展腳本(此腳本是擴展gdb的,不是我們需要debug的腳本)。
$ gdb --python /path/to/libpython .py -p 1000
如果安裝的是GNU的gdb,就需要打開gdb後手動載入libpython.py腳本
(gdb) python
> import sys
>sys.path.insert(0, '/path/to/libpython.py' )
> import libpython
>end
(gdb)
這時就可以使用py-bt命令列印當前線程的Python traceback了。libpython還提供很多命令,例如py-print列印變數,py-locals列印所有本地變數等等,詳細可打開libpython.py查看。

4. 怎樣在linux系統中安裝gdb調試工具

打開命令終端面板輸入:sudoapt-getinstallgdb

如圖所示:

即可安裝,如果還是不可以,那就使用下面這種方式安裝:

打開終端輸入: wgetftp://ftp.gnu.org/gnu/gdb/gdb-7.9.tar.gz

下載完畢後解壓 tar -zxvf/gdb-7.9.tar.gz 然後進行安裝即可

5. Break的Linux下GDB調試

作用:設置斷點(BreakPoint)
我們使用break命令來設置斷點,break在進入指定函數時停住。C++中能使用class::function或function(type,type)格式來指定函數名。
break
在指定行號停住。
break +offset
break -offset
在當前行號的前面或後面的offset行停住。offiset為自然數。
break filename:linenum
在源文件filename的linenum行處停住。
break filename:function
在源文件filename的function函數的入口處停住。
break *address
在程式運行的內存地址處停住。
break
break命令沒有參數時,表示在下一條指令處停住。
break…if
…能是上述的參數,condition表示條件,在條件成立時停住。比如在循環境體中,能設置break if i=100,表示當i為100時停住程式。
查看斷點時,可使用info命令,如下所示:(註:n表示斷點號)
info breakpoints [n]
info break [n]

6. linux 下面怎麼用gdb調試多個.c文件

Linux 下調試匯編代碼既可以用 GDB、DDD 這類通用的調試器,也可以使用專門用來調試匯編代碼的 ALD(Assembly Language Debugger)。
從調試的角度來看,使用 GAS 的好處是可以在生成的目標代碼中包含符號表(symbol table),這樣就可以使用 GDB 和 DDD 來進行源碼級的調試了。要在生成的可執行程序中包含符號表,可以採用下面的方式進行編譯和鏈接:

[xiaowp@gary code]$ as --gstabs -o hello.o hello.s
[xiaowp@gary code]$ ld -o hello hello.o

執行 as 命令時帶上參數 --gstabs 可以告訴匯編器在生成的目標代碼中加上符號表,同時需要注意的是,在用 ld 命令進行鏈接時不要加上 -s 參數,否則目標代碼中的符號表在鏈接時將被刪去。
編程序員通常面對的都是一些比較苛刻的軟硬體環境,短小精悍的ALD可能更能符合實際的需要,因此下面主要介紹一下如何用ALD來調試匯編程序。首先在命令行方式下執行ald命令來啟動調試器,該命令的參數是將要被調試的可執行程序:

[xiaowp@gary doc]$ ald hello
Assembly Language Debugger 0.1.3Copyright (C) 2000-2002 Patrick Alken
hell ELF Intel 80386 (32 bit), LSB, Executable, Version 1 (current)
Loading debugging symbols...(15 symbols loaded)
ald>

當 ALD 的提示符出現之後,用 disassemble 命令對代碼段進行反匯編:

ald> disassemble -s .text
Disassembling section .text (0x08048074 - 0x08048096)
08048074 BA0F000000 mov edx, 0xf
08048079 B998900408 mov ecx, 0x8049098
0804807E BB01000000 mov ebx, 0x1
08048083 B804000000 mov eax, 0x4
08048088 CD80 int 0x80
0804808A BB00000000 mov ebx, 0x0
0804808F B801000000 mov eax, 0x1
08048094 CD80 int 0x80

上述輸出信息的第一列是指令對應的地址碼,利用它可以設置在程序執行時的斷點:

ald> break 0x08048088
Breakpoint 1 set for 0x08048088

斷點設置好後,使用 run 命令開始執行程序。ALD 在遇到斷點時將自動暫停程序的運行,同時會顯示所有寄存器的當前值:

ald> run
Starting program: hello
Breakpoint 1 encountered at 0x08048088
eax = 0x00000004 ebx = 0x00000001 ecx = 0x08049098 edx = 0x0000000Fesp = 0xBFFFF6C0 ebp = 0x00000000 esi = 0x00000000 edi = 0x00000000
ds = 0x0000002B es = 0x0000002B fs = 0x00000000 gs = 0x00000000
ss = 0x0000002B cs = 0x00000023 eip = 0x08048088 eflags = 0x00000246
Flags: PF ZF IF
08048088 CD80 int 0x80

如果需要對匯編代碼進行單步調試,可以使用 next 命令:

ald> next
Hello, world!
eax = 0x0000000F ebx = 0x00000000 ecx = 0x08049098 edx = 0x0000000Fesp = 0xBFFFF6C0 ebp = 0x00000000 esi = 0x00000000 edi = 0x00000000
ds = 0x0000002B es = 0x0000002B fs = 0x00000000 gs = 0x00000000
ss = 0x0000002B cs = 0x00000023 eip = 0x0804808F eflags = 0x00000346
Flags: PF ZF TF IF
0804808F B801000000 mov eax, 0x1

若想獲得 ALD 支持的所有調試命令的詳細列表,可以使用 help 命令:

ald> help
Commands may be abbreviated.
If a blank command is entered, the last command is repeated.
Type `help <command>'' for more specific information on <command>.
General commands
attach clear continue detach disassemble
enter examine file help load
next quit register run set
step unload window write
Breakpoint related commands
break delete disable enable ignore
lbreak tbreak

7. linux中怎麼使用gdb調試進程有dettach

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

8. linux用gdb調試遇到函數調用怎麼辦

運用以下2個命令即可:
next
//執行下一行源代碼,但並不進入調用函數內部
step
//執行下一行源代碼,進入函數內部,這個時候,可以在調用函數裡面加斷點。
gdb中的函數調用:
call
name
調用和執行一個函數(gdb)
call
gen_and_sork(1234,1,0)(gdb)
call
printf(「abcd」)=4finish
結束執行當前函數,顯示其返回值(如果有的話)

9. Linux C++如何用gdb調試

既然會在windows下調試,在linux下也是一樣的。
首先,linux的環境變數PATH的設置,如果是想臨時使用的,可以直接在shell終端中:
export PATH=$PATH:[你要設置的路徑]
$PATH相當於win下的%PATH%,這里用冒號:分隔,相當於win下的分號;
如果想永久生效,可以:
cd ~ //到該用戶目錄下
vi .bash_profile //打開屬性文件
export PATH=$PATH:[你要設置的路徑] //同樣的設置
:wq //保存
這樣就設置好了,但默認情況下該屬性文件在用戶登錄時才生產,如果想立即生效,可以:
source ~/.bash_profile

編譯器植入linux?是在linux下安裝gcc g++ gdb吧?參考這篇文章吧:
http://blog.csdn.net/mylovepan/article/details/7948806

至於調試用的命令,簡單地說:
1.在編譯時使用-g參數,如:gcc -g foo.c -o foo
2.然後進行調試,如:
gdb ./foo //調試foo
(gdb) l //列出源代碼
(gdb) b 5 //在第5行加入斷點
(gdb) r //運行調試
(gdb) p size //假如有個變數為size,這樣看它的值
(gdb) c //繼續執行直到下一個斷點
(gdb) n //執行下一行語句
(gdb) s //進入正在執行的函數內部
....
不寫了,看這篇文章吧
http://blog.csdn.net/nixiangxiren/article/details/6935052

閱讀全文

與linux虛擬機gdb調試命令相關的資料

熱點內容
編譯的代碼一般保存在哪裡 瀏覽:712
githubcopilot讓程序員失業 瀏覽:212
程序員學美術視頻 瀏覽:126
linux查詢外網ip 瀏覽:767
沒有編譯器怎樣寫代碼 瀏覽:712
現代編譯系統 瀏覽:407
python中列表是否為空 瀏覽:275
android編譯release版本 瀏覽:751
如何讓pdf不能列印 瀏覽:553
單片機和溫度感測器 瀏覽:483
windows伺服器怎麼分卷 瀏覽:136
雷雲2卡從雲伺服器同步設置 瀏覽:958
單片機技術一學就會 瀏覽:507
手機攝像文件夾名 瀏覽:136
口才訓練手冊編譯口才精品書系 瀏覽:999
linuxfunc 瀏覽:270
高德地圖解壓後的文件 瀏覽:639
php加水印類 瀏覽:228
編譯原理定義表格和編寫查找函數 瀏覽:350
指數函數和對數函數的高精度快速演算法 瀏覽:210