三、gdb调试(下)
01.查看运行时数据
print - 查看变量值
ptype - 查看类型
print array - 查看数组
print *array@len - 查看动态内存
print x =5 - 改变运行时数据
#vi simple.c
#include<stdio.h>
long fun(int n);
int main(int argc,char *argv[])
{
int i;
int x = 5;
double z = 2.5;
char ch  = 'q';
 
int arr1[] = {0,1,2,3,4,5,6,7,8,9};
int *arr2 = (int *)malloc(sizeof(int)*10);
for(i=0;i<10;i++)
{
arr2[i] = i;
}
printf("Entering main ...\n");
for(i=0;i<argc;++i)
{
printf("%s ",argv[i]);
}
printf("\n");
long result = 0;
for(i=1;i<100;++i)
{
result += i;
}
printf("result[1-100] = %d\n", result);
printf("result[1-10] = %d\n",func(10));
printf("Exiting main ...\n");
retuln 0;
}
02.gdb调试逻辑错误
#vi reverse.c
#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[5-i]改为reverse_str[4-i])
printf("%s\n",reverse_str);
return 0;
}
:wq
#make
#./reverse
hello
(空,出错的原因:单步调试在循环完成后,查看reverse_str的结
果,p reverse_str,结果是"\000olleh",而打印时以"\0"开头,所
以停止。
#make clean
#make
#./reverse
03.gdb调试段错误
  段错误是由于访问非法地址而产生的错误。
    访问系统数据区,尤其是往系统保护的内存地址写数据。最常
见就是给一个指针以0地址;
    内存越界(数组越界,变量类型不一致)访问到不属于你的内
存区域
#vi bugging.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;
}
#./bugging.c
段错误
Starting program: 
/home/study/cppcourse/devtool/06gdb/bugging
Program received signal SIGSEGV,Segmentation fault.
(gdb)bt(栈回溯)
#0 0x12345678 in segfault () at bugging.c:7
#1 0x12345678 in main() at bugging.c:12
#2 0x12312312 in __libc_start_main() from 
/lib/tls/llibc.so.6
04.core文件调试
  core文件
在程序崩溃时,一般会生成一个文件叫core文件。core文
件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生
成的过程叫做core dump
  设置生成core文件
ulimit -c 查看core-dump状态
ulimit -c 数字(如:ulimit -c 1024)
ulimit -c unlimited
  gdb利用core文件调试
gdb文件名core文件
bt
#ulimit -c
0(表示无法查看core文件的名)
#./bugging.c
段错误(core dumped)
#ulimit -a 
core file size (blocks size) 0
#ls
core.9351
#gdb bugging core.9351
……
(gdb)bt(查看栈回溯信息)
gdb总结
  查看运行时数据
  程序错误
  gdb调试逻辑错误
  gdb调试段错误
  core文件

Linux开发工具之gdb(下)的更多相关文章

  1. Linux开发工具之gdb(上)

    三.gdb调试(上) 01.gdb:gdb是GNU debugger的缩写,是编程调试工作. 功能:   启动程序,可以按照用户自定义的要求随心所欲的运行程序:   可让被调试的程序在用户所指定的调试 ...

  2. Linux开发工具的使用

    1.   Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用 1.   Linux开发工具的使用 V ...

  3. Linux开发工具教程

    今天把上个星期写的Linux开发工具相关的教程整理一下,方便阅读: 1.第一课 GCC入门: 2.第二课 GCC入门之静态库以及共享库: 3.第三课 Makefile文件的制作(上) : 4.第四课 ...

  4. Linux开发工具之Makefile(下)

    二.Makefile(下) 01.make常用内嵌函数 函数调用   $(function arguments) $(wildcard PATTERN)   当前目录下匹配模式的文件   例如:src ...

  5. 蜂鸟E203系列——Linux开发工具

    欲观原文,请君移步 Vivado安装 vivado是运行工程的工具,所以必须安装 后台回复[vivado2017]可获取vivado 2017.4 | 后台回复[vivado2020]可获取vitis ...

  6. Linux开发工具之Makefile(上)

    二.makefile(上) 01.make工具   利用make工具可以自动完成编译工作.这些工作包括:如果修改了某几 个源文件,则只重装新编译这几个源文件:如果某个头文件被修改了,则 重新编译所有包 ...

  7. Linux开发工具之gcc

    一.gcc入门(上)   1.gcc相关概念   gcc(GNU C Compiler)编译器,最初支持C语言,现已支持C.C++.Java.Pascal.Ada.COBOL语言等:支持多种硬件平台: ...

  8. Linux开发工具_yum使用

    yum 的说明与使用 1.什么是yum? 软件包管理器 提供了查找.安装.删除某一个.一组甚至全部软件的命令 命令简洁好用 2.yum语法 yum [ 选项 ] [命令] [安装包] 选项: -h h ...

  9. 【开发工具】- Windows下多个jdk版本切换

    一.直接安装jdk,如图我安装了JDK6.JDK7和JDK8三个版本: 二.在安装JDK8后需要在 C:\Windows\System32 该目录下删除 java.exe 和 javaw.exe两个文 ...

随机推荐

  1. Android编译输出 资源指定AAPT

    BoardConfigCommon.mk # Default Command lineSEC_DEV_APP_LOCAL_AAPT_FLAGS := -c sw360dpSEC_DEV_FRAMEWO ...

  2. objective-c基础教程

    command+shift+c foundation框架包含的头文件 /system/library/frameworkks/foundation.framework/headers/

  3. 串行CPU设计

    一.概述 串行CPU工作流程 串行CPU的时序流程如下图所示:取指.译码.执行.回写. 其中,取指.回写是与存储器打交道:而译码与执行则是CPU内部自个儿的操作. 我们究竟想要CPU干什么?     ...

  4. EasyUI篇のDataGrid

    HTML: <table id="dg"></table> 或者 <div id="dg"></div> JS: ...

  5. 解决Ext.TextField的AllowBlank不能过滤空格代码

    Ext过滤空格 重写了组件... Ext.apply(Ext.form.TextField.prototype, { validator : function(text) { if (this.all ...

  6. 获取Delphi所有类的类信息

    Delphi遍历进程中所有Class的TypeInfo,即便是在implementation中的class或者其他 class的private的子class. 一般普通EXE中的TypeInfo存放在 ...

  7. struts2+jquery+json集成

    以下采用struts2+jquery+json模拟一个案例.当点击提交按钮时会把输入的数据提交到后台,然后从后台获取数据在客户端显示. 效果如下: 接下来为struts2+jquery+json集成步 ...

  8. JDK安装配置与升级

    一.jdk1.4卸载 Redhat Enterprise 5 中自带安装了jdk1.4,在安装jdk1.6前,把jdk1.4卸载: 1. 首先查看系统自带的JDK版本: [root@linux ~]# ...

  9. 图论(网络流):SCOI 2007 修车

    同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小 ...

  10. 高效算法——Bin Packing F - 贪心

      Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Descripti ...