ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux程序调试过程分析

2021-10-28 11:30:54  阅读:182  来源: 互联网

标签:分析 core 程序调试 程序 helloworld gdb 调试信息 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来查看堆栈信息;

标签:分析,core,程序调试,程序,helloworld,gdb,调试信息,linux,调试
来源: https://blog.csdn.net/gary_ygl/article/details/121010906

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有