欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++段錯誤(Segmentation fault)快速定位的解決方法

 更新時間:2024年07月05日 09:34:08   作者:昰綻至強  
寫過C++的朋友都知道,有時候程序編譯通過,并不能代表程序就是對的,在linux下做開發(fā)時,經(jīng)常會遇到跑崩潰的情況,但是在終端只會報Segmentation fault,如果工程代碼量少,你還能重新debug一下慢慢找,本文給大家介紹了C++段錯誤的快速定位,需要的朋友可以參考下

問題背景

寫過C++的朋友都知道,有時候程序編譯通過,并不能代表程序就是對的。在linux下做開發(fā)時,經(jīng)常會遇到跑崩潰的情況,但是在終端只會報Segmentation fault,這種情況大部分原因都是諸如訪問越界,指針非法操作等等問題,如果工程代碼量少,你還能重新debug一下慢慢找,但是對于大型工程,想短時間內(nèi)找到是很難的。

問題解決

實際上,程序運行崩潰或中止時,會在當前目錄下生成一種core文件,記錄了異常時的運行狀態(tài)等信息,通過gdb調(diào)用這個core文件就可以快速定位到錯誤。這里舉例說明:

假如我寫了個源程序如下:

// hello.cpp
#include <iostream>
#include <unistd.h>
int main()
{
    while(1) {
        char *p = new char();
        delete p;
        p = nullptr;
        *p = '2';
        sleep(1);
    }
    return 0;
}

指針p new完后又delete掉了,此時p已經(jīng)為空,如果此時再執(zhí)行*p = '2'; 就會出問題,但是編譯器不知道,因為代碼的類型檢查都通過了。

# 編譯通過
g++ -g hello.cpp -o hello
 
# 當前目錄下有兩個文件
ls
test.cpp test

我們通過./test執(zhí)行程序,就會出現(xiàn)如下圖的錯誤。

但是此時并不會生成core文件,需要通過命令開啟core文件的生成:

ulimit -c 0 # -c后面的參數(shù)實際就是限制core文件的大小,設(shè)置為0表示不允許生成core
ulimit -c 100

然后重新執(zhí)行./test,報錯誤后就會發(fā)現(xiàn)當前目錄下多了core文件。此時使用gdb調(diào)試就可以復現(xiàn)定位問題了:

gdb -c core test

在這里就可以通過調(diào)用棧等信息快速定位問題。

到此這篇關(guān)于C++段錯誤(Segmentation fault)快速定位的解決方法的文章就介紹到這了,更多相關(guān)C++段錯誤快速定位內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • QT讀寫Sqlite數(shù)據(jù)庫的三種方式

    QT讀寫Sqlite數(shù)據(jù)庫的三種方式

    Sqlite是一個比較小型的本地數(shù)據(jù)庫,對于保存一些軟件配置參數(shù)或量不是很大的數(shù)據(jù)是相當?shù)姆奖?Qt本身已經(jīng)自帶了Sqlite的驅(qū)動,直接使用相關(guān)的類庫即可,這篇我們主要來說明QT訪問Sqlite數(shù)據(jù)庫的三種方式,需要的朋友可以參考下
    2024-03-03
  • 奇怪的C語言特性

    奇怪的C語言特性

    下面列出的特性未必奇怪,有的算是有趣
    2013-04-04
  • 詳解C語言結(jié)構(gòu)體,枚舉,聯(lián)合體的使用

    詳解C語言結(jié)構(gòu)體,枚舉,聯(lián)合體的使用

    這篇文章主要給大家介紹一下關(guān)于C語言中結(jié)構(gòu)體、枚舉、聯(lián)合體的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考一下
    2022-07-07
  • C++制作俄羅斯方塊

    C++制作俄羅斯方塊

    俄羅斯方塊寫過好幾次了,每次的感覺都不一樣,都有新的收獲。就像達芬奇畫雞蛋一樣,雖然都是畫同樣的雞蛋,但是每次都有不同的收獲。&nbsp;
    2016-05-05
  • C/C++錯誤信息處理的常見方法及函數(shù)

    C/C++錯誤信息處理的常見方法及函數(shù)

    C/C++是兩種廣泛使用的編程語言,特別是在系統(tǒng)編程、嵌入式開發(fā)以及高性能計算領(lǐng)域,這篇文章主要介紹了C/C++錯誤信息處理的常見方法及函數(shù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • C++非遞歸遍歷磁盤文件和遞歸遍歷磁盤文件的程序示例

    C++非遞歸遍歷磁盤文件和遞歸遍歷磁盤文件的程序示例

    這篇文章主要介紹了C++非遞歸遍歷磁盤文件和遞歸遍歷磁盤文件的程序示例,大家可以參考使用二種方法
    2013-11-11
  • C++中try throw catch異常處理的用法示例

    C++中try throw catch異常處理的用法示例

    這篇文章主要給大家介紹了關(guān)于C++中try throw catch異常處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-10-10
  • C++合并二叉樹的思路與示例代碼

    C++合并二叉樹的思路與示例代碼

    二叉樹大家應該都不陌生,但是合并二叉樹呢?這篇文章主要給大家介紹了關(guān)于C++合并二叉樹的相關(guān)資料,文中給出了兩種解決的方法,大家可以根據(jù)需要選擇對應的方法,需要的朋友可以參考下
    2021-08-08
  • C++ 中重載和運算符重載加號實現(xiàn)矩陣相加實例代碼

    C++ 中重載和運算符重載加號實現(xiàn)矩陣相加實例代碼

    這篇文章主要介紹了C++ 中重載和運算符重載加號實現(xiàn)矩陣相加實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 帶你用C語言實現(xiàn)strtok和字符串分割函數(shù)

    帶你用C語言實現(xiàn)strtok和字符串分割函數(shù)

    下面小編就為大家?guī)硪黄猚語言中字符串分割函數(shù)及實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09

最新評論