linux程序调试过程分析

1、gdb调试过程:
介绍:gdb不仅可以用来调试分析和解决实际问题,也可以用来学习程序运行的过程;
gdb的实现是靠ptrace,让被调试的程序作为gdb的子进程,有的通过gdb fork生成,
有的通过gdb attach收养,因此被调试子程序的所有信号和状态都可以被父进程监听和控制;

1)判断一个程序(可执行文件)是否带有调试信息:
    gdb helloworld    // helloworld表示要调试的可执行文件
    如果出现no debugging symbols found表示该程序没有调试信息;

2)编译生成带调试信息的程序:
    gcc -g            // 编译时加上-g参数即可保留程序中的调试信息

3)开始调试:
    gdb helloworld
    然后就是用各种gdb命令来协助调试;
    如run, next, step,break, bt, set args, show args, watch ...

2、core文件调试过程:
介绍:程序因为异常或bug造成crash可以产生core文件,通常core文件包含了程序运行时内存、
寄存器状态、堆栈指针、内存管理信息以及函数调用堆栈信息。core就是程序当前工作状态存储生成的一个文件,
通过工具分析这个文件,可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题点并解决。

1)查看coredump是否开启:
    ulimit -c
    如果为0表示coredump被关闭,通过如下设置开启:
    ulimit -c unlimited
    
    插一句:在windows系统cygwin下使能coredump还需要如下一步:
    export CYGWIN="$CYGWIN error_start=dumper.exe -d %1 %2" // 添加到.bashrc或当前shell下运行

2)生成core文件:
    ./helloworld    // 执行helloworld程序,如果程序异常crash就会在当前目录生成helloworld.core文件

3)利用core文件调试:
    gdb helloworld helloworld.core
    然后就可以用gdb的命令来查看和分析问题,常用的如bt来查看堆栈信息;

上一篇:Redis笔记 spring boot简单整合redis


下一篇:D1-HelloWorld