1. 程式人生 > >Linux下core dump除錯--gdb

Linux下core dump除錯--gdb

在Linux下,程式崩潰時會產生core檔案,記錄錯誤資訊--------即core dump

一、core檔案產生

預設情況下,core dump是關閉的。輸入ulimit -c,檢視儲存core檔案的大小,顯示0,即不會產生core檔案。

設定core檔案大小為某一不為零的值,即可自動產生core檔案:

指令:ulimit -c unlimited 

(對於core檔案,有時候崩潰,產生的檔案大小會比較大,不好為其制定一個具體的數值,因此直接設定大小為無線大。若要指定大小值,將unlimited換為部位0的值即可,如:ulimit -c 1024,此處的1024應該是1024位元組)

到此,當程式掛掉的時候,便會在程式同級目錄下,產生一個core檔案。想要每次產生的檔名不同或者儲存位置修改到別的地方,需要在做一些設定,詳情就百度吧

這種方式,好像只能是從終端中啟動程式。IDE啟動程式,是否會產生core檔案,待試。

二、gdb除錯

進入 程式和core所在的目錄,

gdb ./app core (也可以不進來,或者兩個不再統一目錄也可以,軟體和core檔案給出相對或者絕對的路徑,保證能找到即可)

此時,便會出現錯誤的原因,列印的東西太多,這裡之貼出最後的錯誤部分,如下:

Core was generated by `./tonav --image /wide_stereo/left/image_rect --camerainfo /wide_stereo/left/cam'.
Program terminated with signal SIGABRT, Aborted.
#0  0x00007fd05dc8fc37 in __GI_raise (
[email protected]
=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.

接下來,可以對該錯誤進行跟總除錯:

(gdb) bt   

進入跟蹤除錯模式,顯示結果:

#0  0x00007fd05dc8fc37 in __GI_raise ([email protected]=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007fd05dc93028 in __GI_abort () at abort.c:89
#2  0x00007fd05e59a535 in __gnu_cxx::__verbose_terminate_handler() ()
   from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007fd05e5986d6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007fd05e598703 in std::terminate() ()
   from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007fd05e598922 in __cxa_throw ()
   from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x0000000000505a6c in Calibration::fromPath(boost::filesystem::path) ()
#7  0x0000000000550b32 in TonavRos::run(int, char**) ()
#8  0x000000000050183e in main ()
列出來的就是引發該錯誤的地方從最底層到最上層檔案的順序。

(gdb) up 6       

進入丟6個檔案中的錯誤地方。

然後,通過指令 l 可以看到原始碼。前提是程式是以debug模式執行的。



相關推薦

Linuxcore dump除錯--gdb

在Linux下,程式崩潰時會產生core檔案,記錄錯誤資訊--------即core dump 一、core檔案產生 預設情況下,core dump是關閉的。輸入ulimit -c,檢視儲存core檔案的大小,顯示0,即不會產生core檔案。 設定core檔案大小為某一不為

Linux core dumpgdb 除錯

一、前言     linux下開發時,有時候程式突然崩潰了,沒有任何日誌。     從core檔案中分析原因,通過gdb看出程式掛在哪裡,分析前後的變數,找出問題的原因。     core檔案都帶有程序名稱、程序ID、和時間,這又是怎麼做到的呢?接下來記錄core檔案的

Linuxcore dump

在linux下開發時,如果程式突然崩潰了,也沒有任何日誌。這時可以檢視core。從core檔案中分析原因,通過gdb看出程式掛在哪裡,分析前後的變數,找出問題的原因。 core dump基本概念 當程式執行的過程中異常終止或崩潰,作業系統會將程式當時的記

linux core dump 檔案 gdb分析【轉】

core dump又叫核心轉儲, 當程式執行過程中發生異常, 程式異常退出時, 由作業系統把程式當前的記憶體狀況儲存在一個core檔案中, 叫core dump. (linux中如果記憶體越界會收到SIGSEGV訊號,然後就會core dump) 在程式執行的過程中,有

linuxshell程式設計除錯方法,gdb工具的使用

原帖:向日葵智慧前言windows 的介面操作非常豐富,對程式開發也是如此,各種強大的 IDE 真是非常方便。轉入 linux 程式設計後,沒有介面,用 vim gcc 搞程式開發,一開始還真是不適應。現在用的多了,反而習慣用 linux 開發了。但是,沒法除錯程式真是太痛苦

gdb引數及命令詳解 (已整理) core dump除錯

       -e file               在適當時候把File作為可執行的檔案執行,來檢測與core dump結合的資料。        -se File               從File讀取符號表並把它作為可執行檔案。        -core File        -c File

linuxc程式設計之gdb除錯

之前在個人微信公眾號寫了一篇關於linux下c程式設計之gcc編譯的文章,感興趣可關注我的個人微信公眾號,搜尋移動開發與網路安全技術棧加關注,或掃描本文末尾的微信二維碼加關注。 今天接著說下linu

[skill][debug][gdb] 使用core dump 進行GDB

bsp mit kill nbsp ase pgrep -- org 發生 core dump 掃盲:https://wiki.archlinux.org/index.php/Core_dump 1. 人為制作 core dump   1.1 實時在線生成cor

Linux偵錯程式GDB、makefile的使用

  前面的幾篇部落格中我們講解了Linux下的編輯器vim、編譯器gcc和g++,今天我們來介紹一下其他常用的三種工具,它們分別是程式偵錯程式:GDB、程式碼檢視器:ctags、還有一個輔助工程的工具:Makefile 程式偵錯程式:GDB 在windos下我們常用vs編輯器中自帶

linux的程式除錯方法彙總

       搞電子都知道,電路不是焊接出來的,是調試出來的。程式設計師也一定認同,程式不是寫出來的,是調試出來的。那麼除錯工具就顯得尤為重要,linux作為筆者重要的開發平臺,在linux中討論除錯工具主要是為那些入門者提供一些幫助。除錯工具能讓我們能夠監測

Linux獲取xml除錯資訊等級

Linux下獲取XML除錯資訊等級 #ifndef _LOG_H_ #define _LOG_H_ #include <stdio.h> #include <string.h&g

Linux驅動開發除錯技術(一)

驅動程式開發的一個重大難點就是不易除錯。本文目的就是介紹驅動開發中常用的幾種直接和間接的除錯手段,它們是:     使用printk     檢視OOP訊息     使用strace     使用核心內建的hacking選項     使用ioctl方法     使用/proc 檔案系統     使用

Linux驅動開發除錯技術(二)

三、利用strace 有時小問題可以通過監視程式監控使用者應用程式的行為來追蹤,同時監視程式也有助於建立對驅動正確工作的信心。例如,在看了它的讀實現如何響應不同數量資料的讀請求之後,我們能夠對scull正在正確執行感到有信心。 有幾個方法來監視使用者空間程式執行。你可以執行一個偵錯程式來單步過它的函

Linux圖形化除錯工具: kdbg, Affinic

在linux下除錯確實是個很麻煩的事, 用gdb除錯不怎麼方便, 沒有在windows下用vs爽, 主要原因還是因為gdb是用命令列形式, 其實在linux下也有一些基於gdb的圖形化除錯工具. 1. kdbg ubuntu下 直接 sudo apt-get instal

嵌入式core dump除錯方法

 一、為什麼使用coredump 有的時候寫的程式總會遇到各種異常或者bug導致退出中止,但是程式卻沒有打印出可供參考的log資訊,這時候就可以利用code檔案進行分析。一般情況下,code檔案會記錄程式執行的記憶體,暫存器,堆疊指標等資訊,想要使用code檔案分析,就需要

Linuxcore檔案使用

有時候程式會異常退出而不帶任何日誌,此時就可以使用code檔案進行分析,它會記錄程式執行的記憶體,暫存器,堆疊指標等資訊 什麼是core檔案 通常在Linux下遇到程式異常退出或者中止,

linux串列埠除錯工具/串列埠終端推薦: picocom

對於picocom, kermit, minicom, picocom 最簡單易用,也完全符合我的使用需求。 安裝(mint / ubuntu):$ sudo apt-get install picocom使用:$ picocom -b 115200 /dev/ttyUSB

LinuxCaffe如何除錯

Caffe也算是一個程式碼量比較大的工程,閱讀程式碼過程進行除錯有助於我們理解程式碼。 1、編譯debug模式的Caffe 首先要先將Caffe編譯成debug模式,即需要將Makefile.config中"DEBUG := 1"前面的註釋去掉再進行重新編譯,這樣就能得到C

LinuxCodeBlocks遠端除錯ARM程式環境搭建

Codeblocks:Release 8.02、宿主機:ubuntu10.04、開發板:嵌入式linux作業系統。 1 Codeblocks配置交叉編譯環境 如下圖所示,由上到下的選擇,1處直接選擇即可。2處是你交叉編譯器安裝位置,3 4 5 6 可以在你交叉編譯器安

嵌入式Linux串列埠除錯

By Toradex秦海 1). 簡介 UART串列埠是嵌入式裝置最為常用的除錯和通訊介面之一,無論是RS232還是RS422/485都有著非常廣泛的應用,因此本文就基於嵌入式Linux演示在User Space進行串列埠除錯。 本文所演示的平臺來自於Toradex Co