三、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. Linux系统上使用php获取apk信息

    最近在做一个apk商城,需要在用户上传了apk之后系统自动读取apk信息(包名,版本号等),后台语言使用的是php,需要php去调用系统的aapt命令去读取apk信息,在Linux系统上安装aapt的 ...

  2. SQL 测试

    1.SQL 指的是? 您的回答:Structured Query Language 2.哪个 SQL 语句用于从数据库中提取数据? 您的回答:SELECT 3.哪条 SQL 语句用于更新数据库中的数据 ...

  3. Android 内核基本知识

    Android基本知识 Android基本知识.... 1 1. 各版本系统特性.... 1 2. View绘制流程.... 2 3. 动画体系.... 2 4. 事件分发机制.... 3 输入消息获 ...

  4. Python自动化运维之29、Bottle框架

    Bottle 官网:http://bottlepy.org/docs/dev/index.html Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除 ...

  5. 黑马程序员——利用swap函数研究C的指针

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计3个函数,分别实现已下功能: 交换两个整数 交换两个整形指针 交换任意两个同类型的变量 #i ...

  6. SQLSERVER 2008 R2版本密钥(摘)

    开发版32位:MC46H-JQR3C-2JRHY-XYRKY-QWPVM开发版64位:FTMGC-B2J97-PJ4QG-V84YB-MTXX8 工组版:XQ4CB-VK9P3-4WYYH-4HQX3 ...

  7. LINUX单网卡绑定多个IP

    在linux下,我们有时候需要给单网卡设置不同的IP地址,这样就涉及到单网卡绑定多个IP地址的情况.使用本方法可以方便的为单网卡绑定多个IP地址.笔者使用的环境是centos5.6,应该在fedora ...

  8. HBase eclipse开发环境搭建

    伪分布式环境安装 事先本机必须部署好了伪分布式hadoop开发环境将Hbase/lib下的 hadoop-core-*.jar 与 hadoop保持一致. 将hadoop下的复制到hbase下将had ...

  9. The top 100 papers Nature explores the most-cited research of all time.

    The top 100 papers Nature explores the most-cited research of all time. The discovery of high-temper ...

  10. MIT教授将网页开发整合为完整独立的程式语言Ur/Web

    MIT 的软体技术教授 Adam Chlipala 设计了新的 Ur/Web 程式语言,这是一个整合 HTML.CSS.XML.SQL 及 JavaScript 等网路标准的“完整独立”语言,强调快速 ...