Linux开发工具_6_gdb入门(下)

Linux开发工具

--gdb入门(下)

八、查看运行时数据

print-查看变量值

ptype–查看变量类型

#ptype i

#ptype “aaa”

#ptype arr1 打印数组arr1的类型

print array –查看数组

#p arr1

#p arr1[2]

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

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

print *[email protected] –查看动态内存

#p *[email protected]

#p *[email protected] #将数组越界之后的内存也打印出来了

#p arr[2]@2

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

#print i = 1000

九、程序错误

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

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

逻辑错误:编译和运行都很顺利,但是程序没有干它该干的事情。

十、gdb调试逻辑错误

示例:

#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]; //应该是reverse_str[4-i]... printf("%s\n", reverse_str); return 0; } //这个程序要实现逆序输出字符串hello,但是却没有任何输出。

十一、gdb调试段错误

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

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

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

示例:

#include <stdio.h> #include <stdlib.h> void segfault() { int *p = NULL; *p = 100; } void segfault2() { char buf[1] = "a"; buf[13] = 'A'; printf("%c\n",buf[13]); } int main() { segfault(); // segfault2(); return 0; } // bt命令 #栈回溯

十二、core文件调试

1、core文件

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

2、设置生成core文件

ulimit -c #查看core-dump状态

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

ulimit -c unlimited

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

3、gdb利用core文件调试

gdb 文件名 core文件 #如:gdbbugging core

bt #栈回溯

本文出自 “Boost” 博客,请务必保留此出处http://zhujifang.blog.51cto.com/8634872/1380168

更多相关文章
  • Linux开发工具 --gdb入门(上) 一.概述 gdb是GNUdebugger的缩写,是编程调试工具. 二.功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序. 2.可让被调试的程序在用户所指定的断点处停住(断点可以是条件表达式). 3.当程序停住时,可以检查此时程序中所发生的事. ...
  • 转Android开发工具androidstudiobundle141.2288178
    原文网址:http://www.androiddevtools.cn/ AndroidDevTools简介 Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.An ...
  • 


    		    Red Hat Enterprise Linux 5.10在vmware10下的安装
    Red Hat Enterprise Linux 5.10在vmware10下的安装 1.启动"新建虚拟机"向导程序.如下图,选择"自定义",点击"下一步" 2.选择虚拟机硬件兼容性,你可以根据自己需求选择,这里选择默认,如下图.单击&qu ...
  • 15iOS开发工具系列(按功能分)
    iOS开发工具系列(按功能分)     这是我们多篇iOS开发工具系列篇中的一篇,此前的文章比如:那些不能错过的Xcode插件,iOS开发者有价值的工具集,iOS/OS X开发:各种工具快到碗里来!,App原型设计工具使用心得(上)& App原型设计工具使用心得(下),你用哪种工具进行iOS ...
  • 作者:Eric.wang([email protected]) 写于:2012-04-27 签名:清风拂过,掠影斑斑! 备注:此文仅代表个人观点,如有雷同,纯属借鉴.转载请注明出处! 这篇文章是对之前的一个小结,涉及到的东西是从事嵌入式linux开发中最基本的环境搭建问题,后续我会把自己总结的东西都放 ...
  • Eclipse开发工具的知识点1.工程的属性(properties)1)Text file encoding  工程编码(在导入其他工程时,注意编码类型一致)2)Java build path设置classpath位置,指定当前工程引入类库source中指定.java文件和.class文件存放位置( ...
  • Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt.基于FrameBuffer的Qtopia Core.快速开发工具Qt Designer和国际化工具Qt Linguist等部分.Qt支持所有的UNIX系统,当然也包括Linux系统,还支持WinNT/Win2k. ...
  • 


    		    字符及文本處理之正則表達式:Linux/Unix工具與正則表達式的POSIX規範
    对正则表达式有基本了解的读者,一定不会陌生『\d』.『[a-z]+』之类的表达式,前者匹配一个数字字符,后者匹配一个以上的小写英文字母.但是如果你用过vi.grep.awk.sed之类Linux/Unix下的工具或许会发现,这些工具虽然支持正则表达式,语法却很不一样,照通常习惯的辦法写的『\d』.『 ...
一周排行
  • 解决方法: 遇到这个问题的解决方法:  1. 右键点击工程,选择 "Properties" 2. 选择左边的 "Java Build Path"  3. 打开 "So ...
  • mybatis配置文件中的properties用于配置参数,如下: <properties resource="config.properties"> <property nam ...
  • 


    		    20150919
    上午 观察和管理进程 进程是加载到内存中的指令集 -进程ID号(PID)唯一标识进程 -U
  • const 和 mutable在C++存在已经很多年了,对于如今的这两个关键字你了解多少?   Problem JG Question 1. 什么是“共享变量”? Guru Question 2. const 和 m
  • 安装libpcap和libnet是安装libnids的前提. Libnids的安装的安装 因为Libnids必须支持库Libpcap和Libnet,所以在安装Libnids之前需要先安装Libpcap和Libnet.
  • windows下安装MRTG 一.什么是MRTG MRTG(Multi Router Traffic Grapher),通常讲是一个监控网络链路流量负载的开源软件,它可以从所有运行SNMP协议的设备上(包括服务器.路 ...
  • BIONASE BIONASE是一个革命性的新设备,针对过敏性鼻炎(花粉病或枯草热)以及大多其他类型的鼻炎.BIONASE能够缓解以及有效阻止与过敏性鼻炎相关的临床症状,例如:鼻塞,打喷嚏,头疼以及流眼泪. 本设备治
  • 火狐中jq的attr出現的bug問題用prop代替
    再工作的时候遇到一个很奇怪的问题 ,就是attr属性不好使!就问度娘去了...... 结果
  • 这里首先说一下,之所以把微点单独拿出来比较,是因为它既不同于传统杀软,又不同于通常意义的HIPS,从我个人的理解,微点不具备杀毒引擎,所以是绝对不能归类为杀软的,它更倾向与HIPS,不过更为智能化.今天作这个比较,是 ...
  • 最近在.net中使用Sqlite数据库,发现.net的驱动做得不错,而且实现了加密功能.于是想给自己的数据库加上口令,结果,多次实验都以失敗告终: 链接数据库,然后ChangePassword都成功执行了,但是再次链