查看运行时数据

print - 查看变量值

ptype – 查看变量类型

#ptype i

#ptype “aaa” 打印字符串”aaa”的类型

#ptype array 打印数组array的类型

#ptype main 打印main函数的类型

print array – 查看数组

#p arr1

#p arr1[2] 查看数组arr2第三个元素值

#p &arr1[2] 打印数组元素的地址

#p &arr1 打印数组首地址,与p &arr1[0]作用类似

print *array@len – 查看动态内存

#p *arr2@10

#p *arr2@15  #将数组越界之后的内存也打印出来了

#p *arr@10 #静态的数组也可以改方式打印

#p arr[2]@2 #从arr[2]开始的两个元素

#p arr@2 #打印两个数组

print x=5 – 动态改变运行时数据

#print i = 1000

程序错误

编译错误:编写程序的时候没有符合语言规范导致编译错误【语法错误】。

运行时错误:编译器检查不出这种错误,但在运行的时候可能会导致程序崩溃【如:内存地址非法访问】。

逻辑错误:编译和运行都很顺利,但是执行结果不对

gdb调试逻辑错误

//示例-实现逆序输出字符串hello,但是却没有任何输出
#include <stdio.h>
int main(void)
{
        int i;
        char str[6] = "hello";
        char reverse_str[6] = "";

        printf("%s\n", str);
        for (i=0; i<5; i++)
                reverse_str[5-i] = str[i];
//Error:应该是reverse_str[4-i]...

        printf("%s\n", reverse_str);
        return 0;
}


gdb调试段错误

段错误是由于访问非法地址而产生的错误。

1、访问系统数据区,尤其是往系统保护的内存地址写数据。最常见就是给一个0地址指针赋值

2、内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

//示例
#include <stdio.h>
#include <stdlib.h> 

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

void segfault2()
{
	char buf[1] = "a";
	buf[13] = 'A';
	printf("%c\n",buf[13]);
} 

void segfault3()
{
	char buf[1] = "a";
	buf[10] = 'A';
	printf("%c\n",buf[10]);
} 

int main()
{
	segfault1();
//	segfault2();
//	segfault3(); 

	return 0;
} 

where命令 or bt命令:栈回溯,显示导致段错误的执行函数树

wh命令查看程序代码窗口

core文件调试

1、core文件

在程序崩溃时,一般会生成一个文件叫core文件。core文件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生成的过程叫做core dump

2、设置生成core文件

ulimit -c   #查看core-dump状态

ulimit -c 数字 (如:ulimit -c 1024)

ulimit -a #用于查看当前所有状态信息

将ulimit -c unlimited写入~/.bashrc,则默认会生成core文件

3、gdb利用core文件调试

gdb 程序名 [core-file] #如:gdb bugging core

gdb学习(二)[第二版]的更多相关文章

  1. gcc学习(二)[第二版]

    头文件与库文件 1.概要 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明. 库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的.它 ...

  2. gdb学习(一)[第二版]

    概述 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式) ...

  3. Makefile学习(二)[第二版]

    复杂实例 #演示样例1:在上一个演示样例的基础上再添加一个可运行文件03test[改动之处已标红] .PHONY: clean all CC = gcc CFLAGS = -Wall -g BIN = ...

  4. TensorFlow 深度学习中文第二版·翻译完成

    原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...

  5. python基础学习二——第二天

    对于python而言,一切事物都是对象,对象是基于类创建的,对象继承了类的属性,方法等特性 一.int 首先我们来查看一下int包含了哪些函数 # python3.x dir(int) # ['__a ...

  6. gcc学习(一)[第二版]

    gcc简介 1. gcc是GNU Compiler Collection的缩写.最初是作为C语言的编译器(GNU C  Compiler),作者为Richard Stallman,是GNU项目的奠基者 ...

  7. Makefile学习(一)[第二版]

    简单介绍 1)make:利用 make 工具能够自己主动完毕编译工作.这些工作包含:假设仅改动了某几个源文件,则仅仅又一次编译这几个源文件[make通过比对对应的.c文件与.o文件的时间];假设某个头 ...

  8. Makefile学习(三)[第二版]

    make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当 ...

  9. 《Java程序设计与数据结构教程(第二版)》学习指导

    <Java程序设计与数据结构教程(第二版)>学习指导 欢迎关注"rocedu"微信公众号(手机上长按二维码) 做中教,做中学,实践中共同进步! 原文地址:http:// ...

随机推荐

  1. IP_ADD_MEMBERSHIP 失败

    /*将本机加入多播组*/ err = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,&mreq, sizeof(mreq)); if (err &l ...

  2. Android给控件添加触摸回调

    Android给控件添加触摸回调 脑补一个场景,一个页面点击某个按钮会弹出PopupWindow,然后点击PopupWindow以外的任意位置关闭 效果图 实现方法 可以在布局的最外层容器监听触摸事件 ...

  3. PGM:基于模板的表示

    http://blog.csdn.net/pipisorry/article/details/52537660 引言 概率图模型(无论贝叶斯网或马尔可夫网)在一个固定的随机变量集X上具体指定了一个联合 ...

  4. Android TV开发总结(六)构建一个TV app的直播节目实例

    请尊重分享成果,转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52966319 近年来,Android TV的迅速发展,传统的有线电视受 ...

  5. Dynamics CRM2016 Web API之Expand related entities & $ref & $count

    本篇介绍两个关于1:N关系中通过主实体取关联子实体的api,这两个api会经常被用到而且比原来的odata方式更加方便,之前如果我们要取主实体下所有的关联实体的记录都是通过Retrieve Multi ...

  6. hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)

    数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能. 而hive中间结果 ...

  7. XMPP(三)-安卓即时通讯客户端

    由于时间原因,所以更新比较慢 ,还请大家谅解,此次是对上篇文章中的安卓客户端初级版本进行的一次更新优化,在这次更新后,就有那么一点样子了,可以拿的出手了,呵呵,还在关注的同学也可以及时下载更新.此次主 ...

  8. Dynamics CRM 开启图表的3D效果展示

    CRM中的图表在我们的业务场景中用的很多,用户可以根据自己的实际需求来构建图表查看数据.我们平时看到的图表都是平面的,像下图中的这种,那有没有一种方式可以让展示3D效果看起来更立体呢,答案是可以的. ...

  9. java.util.ServiceLoader使用

    近期在项目中需要实现能在配置文件中定义多个统一接口类型的类,可以在程序中获取到所有配置的类,刚开始打算配置到properties中,然后去程序读取,感觉这种方式不太灵活,于是,研究研究java中有没有 ...

  10. 3.关于QT中的MainWindow窗口,MenuBar,ToolBar,QuickTip等方面的知识点

     1 新建一个空Qt项目 编写12MainWindow.pro HEADERS += \ MyMainWindow.h \ MyView.h SOURCES += \ MyMainWindow.c ...