linuxc調試
⑴ 使用GNU/gdb調試linux C/C++可執行程序查看出錯源代碼、設置斷點
gdb是GNU開源組織發布的一個強大的Linux程序調試工具,比圖形化的調試工具更強大,主要來調試C/C++語言程序。
Debug 版本的可執行程序包含調試信息,用於程序員調試程序。
Release 版本的可執行程序往往是進行了各種優化,使得程序在代碼大小和運行速度上都是最優的,以方便用戶使用。
用gcc/g++編譯時,要加上-g選項生成debug版本的可執行程序,否則就無法使用gdb調試了。
r 表示開始run, 如果在運行的過程中發生了錯誤,比如segmentation fault,可以查看此時的出錯源代碼:
通過b或者break設置斷點,斷點的設置可以通過函數名、行號、文件名+函數名、文件名+行號以及偏移量、地址等進行設置。
比如在function Peer_auto_save上設置斷點,在peer.c的第136行設置斷點:
從斷點處繼續運行
退出gdb
⑵ linux cmake後怎麼調試
1.安裝gcc等必備程序包,在cmake安裝包的網站中選擇binarydistribution下的linuxx86_64下的cmake-3.6.0-Linux-x8664.tar.gz壓縮包,點擊,下載。默認下載到了home/DOWNLOAD2.把下載好的包復制到指定路徑,比如/home/bnu,在當前文件夾中打開終端,輸入3.tarzxvfcmake-3.6.0-Linux-x8664.tar.gz在該目錄下多了一個解壓後的文件夾4.打開新的終端,./bootstrapmakemakeinstall5.此時會打開一個文件/root/.bashrc,找到exportPATH=這些行,在這些行的下面另外添加一行,從而設置環境變數exportPATH=$PATH:/home/bnu/cmake-3.6.0-Linux-x8664/bin輸入完畢保存6.查看版本,測試是否安裝成功:打開終端,輸入cmake--version結果是:cmakeversion3.6.0(安裝cmake成功!)要知道,在根目錄下安裝cmake,那麼不同用戶都可以共享使用這個cmake.
⑶ 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
⑷ 在linux中如何編譯C程序,使之成為可執行文件如何調試
Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。 -c,只編譯,不連接成為可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o為後綴的目標文件,通常用於編譯不包含主程序的子程序文件。 -o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。 -g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。 -O,對程序進行優化編譯、連接,採用這個選項,整個源代碼會在編譯、連接過程中進行優化處理,這樣產生的可執行文件的執行效率可以提高,但是,編譯、連接的速度就相應地要慢一些。 -O2,比-O更好的優化編譯、連接,當然整個編譯、連接過程會更慢.
例子:
gcc -o test test.c
結果生成可執行文件test
⑸ 在Linux下如何開發C程序
在Linux開發環境下,GCC是進行C程序開發不可缺少的編譯工具。GCC是GNU C Compile的縮寫,是GNU/Linux系統下的標准C編譯器。雖然GCC沒有集成的開發環境,但堪稱是目前效率很高的C/C++編譯器。《linux就該這么學》非常值得您一看。Linux平台下C程序開發步驟如下:
1.利用編輯器把程序的源代碼編寫到一個文本文件中。
比如編輯test.c程序內容如下:
/*這是一個測試程序*/
#include<stdio.h>
int main(void)
{
printf("Hello Linux!");
}
2.用C編譯器GCC編譯連接,生成可執行文件。
$gcc test.c
編譯完成後,GCC會創建一個名為a.out的文件。如果想要指定輸出文件,可以使用選項-o,命令如下所示:
$gcc-o test1 test.c
這時可執行文件名就變為test1,而不是a.out。
3.用C調試器調試程序。
4.運行該可執行文件。 在此例中運行的文件是:
$./a.out 或者 test1
結果將得出:
Hello Linux!
除了編譯器外,Linux還提供了調試工具GDB和程序自動維護工具Make等支持c語言編程的輔助工具。如果想要了解GCC的所有使用說明,使用以下命令:
$man gcc
⑹ 如何在windows上調試Linux上的C程序
首先需要在 WINDOWS 系統下面安裝一個 C 語言編譯器(例如:Visual C++),然後把 Linux 下的 C 源程序拷貝到 WINDOWS 系統下面,進入 Visual C++ 環境,即可調試 Linux 系統上的 C 源程序。但是在這里注意一點就是:如果你使用的 C 語言的庫函數不是標準的 C 庫函數,那麼在 WINDOWS 下就無法調試通過,也就是說,你必須保證你的 C 源程序是通用的 C 語言代碼才行。
⑺ linux 下用gdb進行調試.c程序,執行run命令時提示許可權不夠,怎麼辦
.c是源文件,不是程序,沒有可執行許可權,所以不能用來調試。
應該先用gcc來編譯,編譯之後的程序就具有可執行許可權的。
如果我們想用來調試,比如1.c,可以這樣
gcc 1.c -o 1.out -g
然後
gdb 1.c
gdb的用法自己再去找詳細資料吧,一般會用l(list,列出源代碼),b(break,設置斷點),r(run,運行文件)就可以了。
⑻ 如何在Linux 9.0下運用命令進行C語言編程以及編譯、調試、運行
shell輸入vi text.c 進入vim寫代碼 寫好之後保存
然後輸 gcc text.c編譯
輸 ./a.out 運行
建議你先看看vim使用方法,網上一片一片的...
⑼ 如何在Linux終端中建一個.c文件,並且如何運行調試
打開終端,輸入vim/gedit,打開文本編譯器
完成編寫代碼後保存
在終端輸入gcc -c process.c -o process -Wall
⑽ linux c語言調試錯誤
int main(int argc, char **argv)
{
char *p;
int i;
p= (char*) malloc(30); //加類型轉換 (char*)
strcpy(p,"not 30 bytes");
printf("p=<%s>\n",p);
if(argc==2){
if(strcmp(argv[1],"-b") ==0) p[0]='a'; //不要漏小括弧,下標最大29,這里用0
else if(strcmp(argv[1],"-f")==0){
p[0]='b';
}
}
printf("%s\n",p); //這里輸出
free(p); //釋放
return 0;
}
輸入 程序名 -b, 輸出:aot 30 bytes
輸入 程序名 -f, 輸出:bot 30 bytes