gdb调试工具

查看帮助一是man 命令,二是进入www.gnu.org,找到gdb的帮助文档(更详细)。

gcc -Wall -g main.c -o main,只有这样才能产生调试信息,包括core的调试信息。

一、常用命令

    run(r)  运行,执行到断点,重新用r,表示重新开始执行。

    list(l)  列出源代码,l 2,l main,l 2,16(数字表示行数)。
    break(b)  设置断点,b 2,b main。

    info break(i b)  查看断点信息。

    watch  观察变量,相当于在变量处设置了断点。

    continue(c)  继续程序运行,直到下一个断点,配合watch使用,因为watch实际上就是设置了断点。

    step(s)     单步跟踪,类似于VC中的step in。
    next(n)  单步跟踪,类似于VC中的step out。
    finish   运行程序,直到当前函数返回。
    until(u)  退出循环。

    print(p)  查看运行时的变量以及表达式。

    print(p) array  查看数组,print(p) array[1],查看数组第2个元素。

    print(p) *array@len  查看动态内存。

    print(p) x=5   改变运行时数据。


二、Segmentation fault (core dumped) 段错误

    段错误是由于访问非法地址内存而产生的错误。在程序崩溃时,一般会生成一个文件叫core文件。core文件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生成的过程叫做core dump。

    ulimit -c  查看core-dump状态,如果为0,则不产生core文件。
    ulimit -a  查看core文件占的大小。
    ulimit -c unlimited(或数字) 设置后,产生core文件。


    以下main.c由于访问了非法地址内存产生了段错误:

#include <stdio.h>
#include <stdlib.h>

void segfault()
{
	int *p = NULL;
	*p = 100;
}

int main(void)
{
	segfault();
/*
	char buf[1] = "a";
	buf[10003] = 'A';
	printf("%c\n",buf[10003]);
*/

/*
	char* c = "hello";
	c[3] = 'k';
*/
	return 0;
}

       gcc -Wall -g main.c -o main 没有错误

    ./main 出现Segmentation fault (core dumped),产生core文件

    gdb main

    r 会显示出错的代码

    bt 会知道代码所在的函数

    同理,

    gdb main core

    r 会显示出错的代码

    bt 会知道代码所在的函数

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值