查看运行时数据

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 = 01t ...

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

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

  5. TensorFlow 深度学习中文第二版(初稿)

    TensorFlow 深度学习中文第二版 第 1 章深度学习入门 人工神经网络 ANN 如何学习? 神经网络架构 深度学习框架 总结 第 2 章 TensorFlow 的首次观察 TensorFlow ...

  6. 李沐d2l《动手学深度学习》第二版——风格迁移源码详解

    本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...

  7. 李沐《动手学深度学习》第二版比赛2-Classify Leaves

    李沐<动手学深度学习>第二版比赛2-Classify Leaves 我的偶像,李沐大神主讲的<动手学深度学习>(使用Pytorch框架,第一版使用的是MXNet框架)目前已经进 ...

  8. 李沐《动手学深度学习》第二版 pytorch笔记1 环境搭建

    李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 文章目录 李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 此时尚有耐心 虚拟环境搭建 创建虚拟环境 查看 ...

  9. 《精通labview教程——由浅入深的范例学习(第二版)》课后题答案

    <精通labview教程--由浅入深的范例学习(第二版)>课后题答案,[美]John Essick著,[译]邓科等 课后题答案偶数部分是教程自带答案,奇数题目是自制答案 下载链接: 第一章 ...

最新文章

  1. shodan API 获取IP开放端口
  2. 【双100%解法】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  3. linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...
  4. hive建立内部表映射hbase_快手 HBase 在千亿级用户特征数据分析中的应用与实践...
  5. NET问答: using 和 await using 有什么不同?
  6. Ubuntu之12.04常用快捷键——记住这些你就是高手啦!
  7. 星痕 轻松实现大屏数据可视化_数据美的历程有多难?大屏可视化轻松帮你实现...
  8. JMeter Exception: java.net.BindException: Address already in use: connect(转)
  9. MESSL(maven + extjs + spring portlet mvc + spring web flow + liferay )整合架构 7
  10. windows DNS 服务器递归查询超时机制
  11. 黑客破解 APP 常用工具,低调低调!
  12. 万科集团:掌握采购主动权,实现采购流程精细化管理
  13. JDBC深入浅出-jdbc学习笔记【入门到精通】
  14. 从0到1的电商架构应该怎么做?有哪些坑?
  15. CV项目肢体动作识别(三)内附完整代码和详细讲解
  16. 如何将抖音快手短视频好看视频等任何直播平台视频转为MP4
  17. javascript 模板_了解JavaScript中的模板文字
  18. 【Windows 安装JDK8】如何安装java JDK8
  19. b树和b+树的区别。
  20. 《程序员》:唯品会双11大促技术保障实践

热门文章

  1. 操作系统之文件管理:8、文件系统实例
  2. Python中super的用法
  3. Qt之格栅布局(QGridLayout)
  4. 【计算机就业-算法工程师】校招想去互联网公司担任算法工程师该怎么准备
  5. LeetCode 77 组合
  6. Linux 压缩与解压
  7. Shell 计算两个数的加减乘除取余(+、-、*、\、/)
  8. golang 生成随机数
  9. Linux系统编程:lseek扩展文件大小失败原因分析
  10. Python 用for循环实现猜数字游戏