導航:首頁 > 源碼編譯 > gdb編譯輸出程序信息

gdb編譯輸出程序信息

發布時間:2024-06-09 07:45:09

㈠ 如何在Windows的命令行下進行程序編譯和gdb

1、概念介紹。

1、Windows下的cmd就是Windows的命令行終端,其中的一些命令和Ubuntu的有些許區別,不過在這個博客的范疇中沒有涉及。
2、Windows的環境變數,大概可以說是如果設置好了在path路徑裡面了,就可以直接在cmd命令行里直接調用程序。

2、配置操作

1、選擇計算機,右鍵,選擇「屬性」
2、「高級系統設置」 –> 「環境變數」

4、後期優化

大家還可以給自己配一個用的順手的編輯器,比如sublime,gvim,(甚至是notepad ,hhh)同理把它放在環境變數里,那麼也可以在cmd中直接打開,這時在win下的編程過程就和Ubuntu的非常像了。。

5、備注

1、此處以win7為例,其他版本的應該大同小異。

2、另附片面的gdb調試方法

3、使用編輯器和命令行編譯的方法對於了解程序的運行過程更加有好處,但是從方便性上的確不如IDE,特別是用熟了vs的同學們就應該更能體會得到,所以各有利弊,大家自己選擇最符合自己口味的編程環境就好:)

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

㈢ gcc中怎麼使用gdb命令

在linux系統中,默認是沒有安裝gcc編譯器的,可以通過命令
rpm -q | grep gcc

來查看。安裝命令為:
yum -y install gcc

安裝後,編寫一個.c結尾的文件。
gcc test.c

就會默認輸出一個a.out的輸出文件,這個輸出文件就是可執行文件。
如果加上-o選項,則可以自定目標文件。
gcc -o test test.c

test就是它的可執行文件。
一般都默認加上-Wall 選項,可以自動提示一些出錯警告的信息。
gcc -Wall -o test test.c

gbd
以上就是常用的gcc相關知識了。下面就是它的調試,調試通常使用gdb。在編譯的時候需要加上選項-ggdb3選項
gcc -ggdb3 -Wall -o test test.c

這樣在沒有出錯的情況下
gdb test

就進入調試窗口
輸入下面命令可以進行如下的操作:
break 設置斷點
break 21 在第21行設置斷點
break main 在main函數處設置斷點
break test 在函數test處設置斷點
step / s 下一步,直接執行下一條程序
continue / cont 下一段,如果遇到函數,不會進入函數,逐過程,有點類似VS裡面的F10
run 運行
finish 結束調試
tbreak設置臨時斷點
print / p 顯示某個變數的值
p *array@len 輸出數組
p i 輸出i的值
enable 恢復失效的斷點
disable 使斷點失效
clear 清除斷點
backtrace / bt 查看堆棧信息
相關的輸出格式
x 十六進制格式
d 十進制格式
u 十六進制無符號
o 八進制顯示
t 二進制顯示
a 十六進制顯示
c 字元格式顯示
f 浮點數格式顯示

閱讀全文

與gdb編譯輸出程序信息相關的資料

熱點內容
忘記密碼解壓視頻 瀏覽:911
運城機場春運加密 瀏覽:287
安卓手機如何關閉app後台 瀏覽:154
安卓數字密碼忘記怎麼破解 瀏覽:252
pythonzmq模式 瀏覽:180
linux運行php網站 瀏覽:865
實驗室無油壓縮機 瀏覽:805
哪裡可以免費看動畫app 瀏覽:53
文本加密咋解 瀏覽:485
tomcat做伺服器怎麼設置 瀏覽:252
非對稱加密會增大網路包嗎 瀏覽:703
為什麼不能編譯c 瀏覽:261
數據伺服器不能啟動是什麼意思 瀏覽:556
java以什麼開頭 瀏覽:820
蘋果手機相冊文件夾如何清理 瀏覽:405
伺服器雲電腦搭建教程 瀏覽:410
eco怎麼搭建伺服器 瀏覽:468
周轉材料核演算法 瀏覽:358
學nodejs還是php好 瀏覽:281
電信營業廳app怎麼買q幣 瀏覽:918