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模式執行的。
相關推薦
Linux下core dump除錯--gdb
在Linux下,程式崩潰時會產生core檔案,記錄錯誤資訊--------即core dump 一、core檔案產生 預設情況下,core dump是關閉的。輸入ulimit -c,檢視儲存core檔案的大小,顯示0,即不會產生core檔案。 設定core檔案大小為某一不為
Linux 下 core dump 的 gdb 除錯
一、前言 linux下開發時,有時候程式突然崩潰了,沒有任何日誌。 從core檔案中分析原因,通過gdb看出程式掛在哪裡,分析前後的變數,找出問題的原因。 core檔案都帶有程序名稱、程序ID、和時間,這又是怎麼做到的呢?接下來記錄core檔案的
Linux下core dump
在linux下開發時,如果程式突然崩潰了,也沒有任何日誌。這時可以檢視core。從core檔案中分析原因,通過gdb看出程式掛在哪裡,分析前後的變數,找出問題的原因。 core dump基本概念 當程式執行的過程中異常終止或崩潰,作業系統會將程式當時的記
linux core dump 檔案 gdb分析【轉】
core dump又叫核心轉儲, 當程式執行過程中發生異常, 程式異常退出時, 由作業系統把程式當前的記憶體狀況儲存在一個core檔案中, 叫core dump. (linux中如果記憶體越界會收到SIGSEGV訊號,然後就會core dump) 在程式執行的過程中,有
linux下shell程式設計除錯方法,gdb工具的使用
原帖:向日葵智慧前言windows 的介面操作非常豐富,對程式開發也是如此,各種強大的 IDE 真是非常方便。轉入 linux 程式設計後,沒有介面,用 vim gcc 搞程式開發,一開始還真是不適應。現在用的多了,反而習慣用 linux 開發了。但是,沒法除錯程式真是太痛苦
gdb引數及命令詳解 (已整理) core dump除錯
-e file 在適當時候把File作為可執行的檔案執行,來檢測與core dump結合的資料。 -se File 從File讀取符號表並把它作為可執行檔案。 -core File -c File
linux下c程式設計之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檔案分析,就需要
Linux下core檔案使用
有時候程式會異常退出而不帶任何日誌,此時就可以使用code檔案進行分析,它會記錄程式執行的記憶體,暫存器,堆疊指標等資訊 什麼是core檔案 通常在Linux下遇到程式異常退出或者中止,
linux下串列埠除錯工具/串列埠終端推薦: picocom
對於picocom, kermit, minicom, picocom 最簡單易用,也完全符合我的使用需求。 安裝(mint / ubuntu):$ sudo apt-get install picocom使用:$ picocom -b 115200 /dev/ttyUSB
Linux下Caffe如何除錯
Caffe也算是一個程式碼量比較大的工程,閱讀程式碼過程進行除錯有助於我們理解程式碼。 1、編譯debug模式的Caffe 首先要先將Caffe編譯成debug模式,即需要將Makefile.config中"DEBUG := 1"前面的註釋去掉再進行重新編譯,這樣就能得到C
Linux下CodeBlocks遠端除錯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