⑴ linux 小調用執行程序時 產生core文件,gdb調試時如下信息:
用gdb調試工具。 1、gcc -g 1.c 2、執行 目的是產生core文件 3、gdb ./a.out core 4、where
⑵ Linux中利用gdb載入程序和core文件分析,在都core分析的時候(gdb test core)顯示的是沒有這個文件
要讓打開系統產生mp文件的功能,才能產生core文件;命令為:ulimit -c unlimited
⑶ linux gdb調試問題
出現此錯誤的原因主要是gcc4.9生成的調試信息是dawnfs4,而gdb7.0支持的是 dawnfs2
這個問題其實是編譯環境的問題,可以更改gcc和gdb的版本,這需要去尋找合適的版本。當然也可以給gcc增加編譯參數,使其生成dawnfs2調試信息,主要參數為-gdwarf-2 -gstrict-dwarf,做法如下:
在.bashrc中加入alias gcc='gcc -gdwarf-2 -gstrict-dwarf',重啟終端使其生效
這樣gdb可以使用,也不會出現上面的錯誤。
⑷ 怎樣在linux系統中安裝gdb調試工具
我的怎麼可以用sudoapt-getinstallgdb,看我的截圖:
⑸ linux禁止gdb調試
禁止在 Linux 中 gdb 調試的方法有許多,以下是其中的一種方法:
1. 禁用 core mp:可以通過以下命令將 core mp 禁用:
```
ulimit -c 0
```
這將確保應用程序在蘆碧舉崩潰時不會生成任何 core mp 文件。gdb 通常需要訪問 core mp 文件來執行調試操作,因此禁用它們可以幫助防止調試。
2. 使用 ptrace:慧察ptrace 系統調用可以被用來執行程序間的跟蹤和調試,因此禁用它可以防止 gdb 調試。為了禁用 ptrace,可以在 /etc/sysctl.conf 文件中添加以下內容:
```
kernel.yama.ptrace_scope = 1
```
然後更新 sysctl.conf 文件,使設置生效:
```
sudo sysctl -p
```
這將限制 ptrace 僅在其父進程和子進程之間(或在具有適當許可權的特權用戶之間)進行。這樣可以防止普通用戶使用 gdb 調試其他用戶、系統進程或其他特權進程。
請注意,以上方法僅僅是防止 gdb 調試的其中一種方法,還有其陪碧他方法可以繞過這些限制。因此,禁止 gdb 調試並不能完全保證系統的安全性和機密性。如果您對系統安全性有更高的要求,建議請咨詢專業安全人員提供更加嚴格的安全策略。
⑹ Linux 裡面的gdb到底是個什麼東西
分類: 電腦/網路 >> 操作系統/系統故障
問題描述:
第一次在Linux上工作,要用到一個什麼gdb的東東。gdb到底是什麼呢,各位老大?
解析:
Linux 包含了一個叫 gdb 的 GNU 調試程序. gdb 是一個用來調試 C 和 C++ 程序的強力調試器. 它使你能在程序運行時觀察程序的內部結構和內存的使用情況. 以下是 gdb 所提供的一些功穗螞亂能:
它使你能監視你程序中變數的值.
它使你能設置斷點以使程序在指定的代碼行上停止執行.
它使你能一行行的執行你的代碼.
在命令行上鍵入 gdb 並按回車鍵就可以運行 gdb 了, 如果一切正常的話, gdb 將被啟動並且你將在屏幕上看到類似的內容:
GDB is free sofare and you are wele to distribute copies of it
under certain conditions; type "show ing" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.14 (i486-slakware-linux), Copyright 1995 Free Sofare Foundation, Inc.
(gdb)
當你啟動 gdb 後, 你能在命令行上指定很多的猜檔選項. 你也可以以下面的方式來運行 gdb :
gdb <fname>
當你用這種方式運行 gdb , 你能直接指定想要調試的程序. 這將告訴gdb 裝入名為 fname 的可執行文件. 你也可以用 gdb 去檢查一個因程序異常終止而產生的 core 文件, 或者與一個正在運行的程序相連. 你可以參考 gdb 指物和南頁或在命令行上鍵入 gdb -h 得到一個有關這些選項的說明的簡單列表.
⑺ linux gdb如何安裝
|建議:
1. 首先可以使用命令「 rpm -qa |grep gdb"查詢系統中是否安裝了gdb軟體包,如果安裝了,應該專顯示如下:
[root@localhost ~屬]# rpm -qa |grep gdb
gdbm-1.8.0-26.2.1
gdb-6.8-37.el5
gdbm-devel-1.8.0-26.2.1
2. 如果系統沒有安裝gdb軟體包,需要先准備好gdb對應的軟體包,通常在系統光碟Server文件夾下;
3. 使用命令「rpm -ivh gdb-6.8-37.el5.rpm」或者類似的操作回車即可安裝;
4. 安裝結束後,再使用命令「rpm -qa |grep gdb"查詢,如果成功安裝了,應該顯示如下:
[root@localhost ~]# rpm -qa |grep gdb
gdb-6.8-37.el5
5. 如果安裝不成功,檢查一下錯誤信息,有可能是因為少安裝了一些關聯軟體,根據提示安裝即可。
⑻ 嵌入式Linux的GDB遠程調試如何實現呢
遠程調試環境由宿主機GDB和目標機調試
stub共同構成,兩者通過串口或TCP連接。使用GDB標准遠程串列協議協同工作,實現對目標機上的系統內核和上層應用的監控和調試功能。調試stub
是嵌入式系統中的一段代碼,作為宿主機GDB和目標機調試程序間的一個媒介而存在。就目前而言,嵌入式Linux系統中,主要有三種遠程調試方法,分別適用於不同場合的調試工作:
用ROM Monitor調試目標機程序
用KGDB調試系統內核
用gdbserver調試用戶空間程序。
這三種調試方法的區別主要在於:目標機遠程調試stub的存在形式的不同,而其設計思路和實現方法則是大致相同的,而我們最常用的是調試應用程序,就是採用gdb+gdbserver的方式進行調試。在很多情況下,用戶需要對一個應用程序進行反復調試,特別是復雜的程序,採用GDB方法調試,由於嵌入式系統資源有限性,一般不能直接在目標系統上進行調試,通常采gdb+gdbserver的方式進行調試。Gdbserver在目標系統中運行,gdb則在宿主機上運行。
下載需要用的的軟體包。
一.編譯安裝arm-linux-gdb
<1>#tar jxvf gdb-7.3.tar.bz2
<2>#cd gdb-7.3
<3>#./configure--target=arm-linux --enable-sim --prefix=/usr/local/bin
<4>#make
<5>#make install
二.編譯安裝gdbserver
<1>#cd gdb-7.3/gdb/gdbserver
<2>#./configure --target=arm-linux--host=arm-linux
<3>#make
這樣在gdb-7.3/gdb/gdbserver目錄下就生成了一個gdbserver可執行文件,拷貝到目標開發板上.
三.測試arm-linux-gdb + gdbserver
<1>在超級終端輸入:
#./gdbserver 192.168.100.1:2345 hello
[192.168.100.1為pc機ip地址,2345為監聽埠,hello為待調試程序
這樣在開發板上可以看到如下提示信息:
Process wpa_cli created; pid = 730
Listening on port 2345
表示gdbserver 成功運行等待客戶端的連接信息
<2>在pc機上輸入:
#arm-linux-gdb hello
然後在GDB界面輸入:
#target remote 192.168.100.2:2345
[192.168.100.2為開發板ip地址,2345為開發版監聽埠]
這樣在開發板上可以看到如下提示信息:
Remote debugging from host 192.168.100.1
表示gdbserver成功運行並且建立連接關系,等待客戶端的調試信息。
⑼ linux 怎麼分析core文件
從接觸unix開始就一直聽到和遇到core mp,特別是剛學著使用C語言在AIX下編寫程序的時候, mp更是時不時就會不請自來。記得當時剛寫應用的時候,提交程序時最怕的就是在運行過程時遇到core mp,對於銀行核心系統,特別是使用靜態應用進程,如果一個相對頻繁一點的交易導致core mp,那麼毫無疑問,除了趕緊定位錯誤改程序外,重啟進程甚至無法爭取到多少緩沖的時間來進行代碼的更正和測試。而且往往導致core mp的,就是程序中一個小小的未注意到或者未測試到的一個疏忽。
雖然常常遇到core mp,不過很長時間內,都是出於知道這個名字,知道它導致的後果,知道一部分導致它出現的原因,其他的就都不甚了了了。說起來,就是自己太懶了,懶得看書......少壯不努力啊。看過一則統計,說60歲以上的老人,超過70%都後悔少壯不努力,不知統計的數據能否反映整個社會的情況。不過總的來說,這句古話還是有些道理的。大家不要學我。哈哈
core mp,翻譯過來講,就是核心轉儲。大致上就是指,如果由於應用錯誤,如浮點異常、指令異常等,操作系統將會轉入內核的異常處理,向對應的進程發送特定的信號(SIGNAL),如果進程中沒有對這些信號進行處理,就會轉入默認的處理,core mp就是其中的一種。如果進程core mp,系統將會終止該進程,同時系統會產生core文件,以供調試使用。這個core文件其實就是內存的映像,即進程執行的時候內存的內容,也就是所謂的core mp。平常大家說某某進程core mp了,其實主要的意思就是說:某某進程因為錯誤而被系統自動終止了。
AIX上提供了dbx工具可以對core mp進行調試,協助定位引起core mp的代碼。最普通的語法是:
dbx 應用名 core文件, 然後使用where命令來顯示調試信息
一般來講,根據工作中遇到的情況,dbx還是能夠比較輕松的根據提示的內容來定位代碼的。不過也有一些特殊情況時,dbx顯示的調試信息過於模糊或者不直觀,這個時候就只能根據經驗來逐步定位了。有時定位起來會耗用相當長的時間。遇到這種情況時,使用日誌文件,通過在代碼中穿插多個寫log的語句,也可以協助發現。因為進程core mp時,日誌當然也中斷了,根據日誌在哪個代碼行之後或之前中止了,可以有效縮小尋找的范圍。甚至,在有些情況下,使用日誌定位是唯一簡便的方法了。
⑽ 如何使用GDB調試Coremp文件
一般這種情況都是因為數組越界訪問,空指針或是野指針讀寫造成的。程序小的話還比較好辦,對著源代碼仔細檢查就能解決。但是對於代碼量較大的程序,里邊包含N多函數調用,N多數組指針訪問,這時想定位問題就不是很容易了(此時牛人依然可以通過在適當位置打printf加二分查找的方式迅速定位:P)。懶人的話還是直接GDB搞起吧。 神馬是Core Dump文件偶爾就能聽見某程序員同學抱怨「擦,又出Core了!」。簡單來說,core mp說的是操作系統執行的一個動作,當某個進程因為一些原因意外終止(crash)的時候,操作系統會將這個進程當時的內存信息轉儲(mp)到磁碟上1。產生的文件就是core文件了,一般會以core.xxx形式命名。 如何產生Core Dump 發生doremp一般都是在進程收到某個信號的時候,Linux上現在大概有60多個信號,可以使用 kill -l 命令全部列出來。sagi@sagi-laptop:~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX針對特定的信號,應用程序可以寫對應的信號處理函數。如果不指定,則採取默認的處理方式, 默認處理是coremp的信號如下:3)SIGQUIT 4)SIGILL 6)SIGABRT 8)SIGFPE 11)SIGSEGV 7)SIGBUS 31)SIGSYS 5)SIGTRAP 24)SIGXCPU 25)SIGXFSZ 29)SIGIOT 我們看到SIGSEGV在其中,一般數組越界或是訪問空指針都會產生這個信號。另外雖然默認是這樣的,但是你也可以寫自己的信號處理函數改變默認行為,更多信號相關可以看參考鏈接33。 上述內容只是產生coremp的必要條件,而非充分條件。要產生core文件還依賴於程序運行的shell,可以通過ulimit -a命令查看,輸出內容大致如下:sagi@sagi-laptop:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheling priority (-e) 20 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 看到第一行了吧,core file size,這個值用來限制產生的core文件大小,超過這個值就不會保存了。我這里輸出是0,也就是不會保存core文件,即使產生了,也保存不下來==! 要改變這個設置,可以使用ulimit -c unlimited。 OK, 現在萬事具備,只缺一個能產生Core的程序了,介個對C程序員來說太容易了。#include ; #include ; int crash() { char *xxx = "crash!!"; xxx[1] = 'D'; // 寫只讀存儲區! return 2; } int foo() { return crash(); } int main() { return foo(); } 上手調試 上邊的程序編譯的時候有一點需要注意,需要帶上參數-g, 這樣生成的可執行程序中會帶上足夠的調試信息。編譯運行之後你就應該能看見期待已久的「Segment Fault(core mped)」或是「段錯誤 (核心已轉儲)」之類的字眼了。看看當前目錄下是不是有個core或是core.xxx的文件。祭出linux下經典的調試器GDB,首先帶著core文件載入程序:gdb exefile core,這里需要注意的這個core文件必須是exefile產生的,否則符號表會對不上。載入之後大概是這個樣子的:sagi@sagi-laptop:~$ gdb coremp core Core was generated by ./coremp'. Program terminated with signal 11, Segmentation fault. #0 0x080483a7 in crash () at coremp.c:8 8 xxx[1] = 'D'; (gdb)我們看到已經能直接定位到出core的地方了,在第8行寫了一個只讀的內存區域導致觸發Segment Fault信號。在載入core的時候有個小技巧,如果你事先不知道這個core文件是由哪個程序產生的,你可以先隨便找個代替一下,比如/usr/bin/w就是不錯的選擇。比如我們採用這種方法載入上邊產生的core,gdb會有類似的輸出:sagi@sagi-laptop:~$ gdb /usr/bin/w core Core was generated by ./coremp'. Program terminated with signal 11, Segmentation fault. #0 0x080483a7 in ? () (gdb)可以看到GDB已經提示你了,這個core是由哪個程序產生的。 GDB 常用操作 上邊的程序比較簡單,不需要另外的操作就能直接找到問題所在。現實卻不是這樣的,常常需要進行單步跟蹤,設置斷點之類的操作才能順利定位問題。下邊列出了GDB一些常用的操作。 啟動程序:run 設置斷點:b 行號|函數名 刪除斷點:delete 斷點編號 禁用斷點:disable 斷點編號 啟用斷點:enable 斷點編號 單步跟蹤:next 也可以簡寫 n 單步跟蹤:step 也可以簡寫 s 列印變數:print 變數名字 設置變數:set var=value 查看變數類型:ptype var 順序執行到結束:cont 順序執行到某一行: util lineno列印堆棧信息:bt