Linux環境下段錯誤產生原因及調試方法

一、段錯誤是什麼?

    段錯誤指訪問的內存超出了系統給這個程序設定的內存空間,例如訪問了不存在的內存地址,訪問了系統保護的內存地址,訪問了只讀的內存地址等

二、一一舉例說明

  • 訪問不存在的內存地址
#include<stdio.h>
void mian()
{
    int *ptr = NULL;
    *ptr = 0;
}
  • 訪問系統受保護的內存地址
#include<stdio.h>
void main()
{
    int *ptr = (int *)0;
    *ptr = 100;
}
  • 訪問只讀的內存地址
#include<stdio.h>
void main()
{
    char *ptr = "test";
    strcpy(ptr,"TEST");
}
  • 棧溢出
#include<stdio.h>
void main()
{
    main();
}

三、由於段錯誤產生core

1、core文件的簡單介紹

   在一個程序崩潰時,它一般會在指定目錄下生成一個core文件。core文件是一個內存映像(同時加上調試信息),主要是用來調試的

2、開啓或關閉core文件的生成

  • 阻止系統生成core文件:ulimit -c 0
  • 開啓core文件生成:ulimit -c 1024或者 ulimit -c unlimited  (該命令必須在管理員權限下)

3、使用core文件

在core文件所在目錄鍵入:gdb -c core 它會啓動GNU的調試器,來調試core文件,並且會顯示生成此core文件的程序名,終止此程序的信號等等,如果你已知道是由哪個程序生成的此core文件的,比如MyServer崩潰了生成core.12345,那麼用此指令調試:gdb -c core MyServer 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章