gdb调试工具

标签: gdb 调试工具 | 发表时间:2013-05-05 21:19 | 作者:jltxgcy
出处:http://blog.csdn.net

查看帮助一是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]);
*/
	return 0;
}
        gcc -Wall -g main.c -o main 没有错误

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

    gdb main

    r 会显示出错的代码

    bt 会知道代码所在的函数

    同理,

    gdb main core

    r 会显示出错的代码

    bt 会知道代码所在的函数

作者:jltxgcy 发表于2013-5-5 21:19:05 原文链接
阅读:79 评论:0 查看评论

相关 [gdb 调试工具] 推荐:

gdb调试工具

- - CSDN博客系统运维推荐文章
查看帮助一是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(数字表示行数).

Linux下gdb调试工具的使用

- - CSDN博客综合推荐文章
gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具. gdb主要完成四个方面的功能:(1)、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序;(2)、可让被调试的程序在你所指定的调试的断点处停住(断点可以是条件表达式);(3)、当程序被停住时,可以检查此时你的程序中所发生的事;(4)、动态的改变你程序的执行环境.

C实战:强大的程序调试工具GDB

- - CSDN博客综合推荐文章
C实战:强大的程序调试工具GDB. 这里只列举最最常用的GDB命令. gdb program:准备调试程序. 也可以直接进入gdb,再通过file命令加载. b function:为函数设置断点. b是break的缩写,除了函数名,还可以是地址、当前执行处的+/-偏移等. run args:开始运行程序,run后面可以加程序需要的参数,就像在命令行正常运行时那样.

Linux下gdb调试

- - CSDN博客移动开发推荐文章
关于gdb的其他客套话不多说,直接进入正题. 列出产生执行文件源代码的一部分. 执行一行源代码但不进入函数内部. 执行一行源代码而且进入函数内部. 监视一个变量的值,一旦值有变化程序停住. 1.新建一个源文件vi yrp.cc,源代码如下:. 2.生成可执行文件 g++ -g -o yrp yrp.cc  注意必须使用-g参数,编译会加入调试信息,否则无法调试执行文件..

[转]GDB调试多线程

- - 小彰
GDB 多线程调试基本命令 实现简介 以及一个问题的解决. 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧. 先介绍一下GDB多线程调试的基本命令. 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID. 切换当前调试的线程为指定ID的线程.

Linux下进行GDB调试

- - CSDN博客推荐文章
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具. 一般来说,GDB主要帮助自己完成下面四个方面的功能;. 1:启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 2:可以让被调试的程序在你所指定的调制的断点处停住(断点可以是条件表达式). 3:当程序被停住时,可以检查你的程序中发生的事.

GDB学习之道:GDB调试精粹及使用实例

- - CSDN博客系统运维推荐文章
要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、. 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的. 利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表.

Mobile Web调试工具Weinre

- - 移动开发 - ITeye博客
现在、将来,用移动设备上网越来越成为主流. 但对于开发者们来说,移动web的调试一直是个难题,前期可以使用模拟器来协助调试,但到了真机调试阶段就让人非常头痛. 而Weinre就是解决这难题的利器.   Weinre的本意是Web Inspector Remote,它是一种远程调试工具. 功能与Firebug、Webkit inspector类似,可以帮助我们即时更改页面元素、样式,调试JS等,下面就简单介绍下如何使用.

使用 gdb 调试 Python 进程

- yinseny - python.cn(jobs, news)
有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump. 例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到哪行Python代码呢. 这时就需要祭出gdb这个神器了. 确认你的gdb版本是>=7,gdb从版本7开始支持对Python的debug.

用gdb+nm调试php c extension程序

- ndv - 淘宝核心系统团队博客
最近在写Beanstalkd的php c extension客户端程序,写程序离不开调试,下面把调试中碰到的问题和解决方法和大家分享一下. .so写好了是给php脚本调用的,如果php脚本执行崩掉了,.so也只能在进程中饮恨而终,这时候php脚本调试经常用的echo, print_r, var_dump都派不上用场了.