gdb笔记 ---《Linux.C编程一站式学习》
gdb笔记 ---《Linux.C编程一站式学习》
单步执行和跟踪函数调用
函数调试实例
#include <stdio.h>
int add_range(int low, int high)
{
int i, sum;
for (i = low; i <= high; i++)
{
sum = sum + i;
}
return sum;
}
int main(void)
{
int result[100];
result[0] = add_range(1, 10);
result[1] = add_range(1, 100);
printf("result[0] = %d\n result[1] = %d\n", result[0], result[1]);
return 0;
}
arrange_range函数从low加到high,程序打印的结果为:
<1>result[0] = 55
<2>result[1] = 5105
打印<1>结果正确,但<2>结果出错。<1>和<2>都是运行同一段代码,假如代码是错的,<1>却是正确的。
在阅读理解代码后还是找不出错误,可以使用gdb进行源码级的调试:
gdb进行源码级调试
编译时要加上-g的选项,生成可让gdb进行源码级调试的可执行文件。
-g选项作用:在可执行文件中加入源代码的信息,比如可执行文件中第几条机器指令对应源代码的第几行,在调试的时候确保gdb能找到源代码
没加-g选项:
$ gcc -g main.c -o main
$ gdb main
GNU gdb (Ubuntu 7.11-1-0ubuntu1~16.5) 7.11.1 //版本号
Copyright (C) 2016 Free Software Foundation, Inc
License GPLv3++: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".//设置
Type "show configured " for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources onlice at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "aprops word" to search for command for commands related to "word"...//查找命令
"/home/lyl/Desktop/main.c": not in executable format: File format not recongnized //不可执行的格式:文件格式不可识别
(gdb)
gdb的help命令
(gdb) help
List of classes of commands:
aliases -- Aliases of other commands //命令的别名
breakpoints -- Making program stop at certain points //断点:使程序停止在你需要停止的某些点上
data -- Examining data //检查数据
files -- Specifying and examining files //指定和检查文件
internals -- Maintenance commands //维护命令?翻译不知道是否正确
obscure -- Obscure features //提供编译,记录,监控等功能
running -- Running the program
stack -- Examing the stack //检查堆栈
status -- status inquireis //状态查询?
support -- Support facilities //支持的设备?
tracepoints -- Tracing of program execution whithout stopping the program //当程序没有停止的时候跟踪程序
user-defined -- 用户自定义命令
Type "help" followed by a class name for a list of commands i that class.
Type "help all" for the list of all commands.
Type "help" followed by command name for full documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unmbiguous.
进一步查看某一类别有哪些命令
help files #help + 类别
list命令:从第一行开始列出源代码
(gdb) list 1
1 #include <stdio.h>
2
3 int add_range(int low, int high)
4 {
5 int i, sum;
6 for(i = low; i <= high; i++)
7 sum = sum + i;
8 return sum;
9 }
10
gdb笔记 ---《Linux.C编程一站式学习》的更多相关文章
- GDB笔记
GDB是在Linux命令行下对C/C++的程序进行调试常用的一个命令,现将平时记录在本子上的笔记整理如下: 一.断点 断点类型有breakpoints, watchpoints, catchpoint ...
- c语言,gdb
Get gdb call stack http://blog.csdn.net/zoufeiyy/article/details/1490241 Debugging with GDB - Examin ...
- GDB调试基础
GDB调试基础 https://lesca.me/archives/gdb-basic-knowledge.html GDB笔记(二):条件断点.命令列表.监视点 https://lesca.me/a ...
- GDB调试笔记
参考资料:GDB调试精粹及使用实例 # 调试实例 #include <iostream> #include <cstring> using namespace std; ][] ...
- ubuntu: qemu+gdb 调试linux kernel 学习笔记
声明: 本笔记内容并非本人原创,90%来自网络资料的整合.同时,由于自己是刚刚接触qemu & gdbserver remote debug,本文也就算不得教程,仅供有缘人参考而已. ---- ...
- 用gdb调试程序笔记: 以段错误(Segmental fault)为例
用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...
- 《软件调试的艺术》学习笔记——GDB使用技巧摘要
<软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...
- 手把手教你使用eclipse+qemu+gdb来单步调试ARM内核【学习笔记】
平台信息:linux4.0 平台:qemu 作者:庄泽彬 说明:笨叔叔的Linux视频的笔记 一.编译linux源码 export CROSS_COMPILE=arm-linux-gnueabi- e ...
- gdb使用笔记
相关编译选项: 1.-g 开启gdb 2.-o0,o2 o0表示不优化, 3. -funsigned-char -fdata-sections 会使compiler为每个function和data ...
随机推荐
- Confluence 6 插入一个文件到你的页面
文件可以在页面中以缩略图或者链接的方式显示.我们有多种办法能够上传文件,请参考 Upload Files 页面. 你可以控制文件如何在你的页面中显示.文件在页面中显示的可用方法与你的文件类型有关. 插 ...
- iptables中DNAT和SNAT转发的配置方法
1.一对一流量完全DNAT 首先说一下网络环境,普通主机一台做防火墙用,网卡两块 eth0 192.168.0.1 内网 eth1 202.202.202.1 外网 内网中一台主机 192.168. ...
- [DTOJ3996]:Lesson5!(DP+拓扑+线段树)
题目描述 “最短的捷径就是绕远路,绕远路就是我最短的捷径” 转眼就$Stage\ X$了,$Stage\ X$的比赛路线可以看做一个$n$个点$m$条边的有向无环图,每条边长度都是$1$.杰洛$\cd ...
- Mysql 里CHAR和VARCHAR的最大长度及一些注意事项
先写出结论: Mysql 5中 非空CHAR的最大总长度是255[字节]:非空VARCHAR的最大总长度是65533[字节]. 可空CHAR的最大总长度是254[字节]:可空VARCHAR的最大总长度 ...
- 为什么要使用 Go 语言,Go 语言的优势在哪里?
1.Go有什么优势 可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了. 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的 ...
- SNMP命令
snmp命令 配置管理网络协议Weblogic项目管理Cisco Snmputil 命令 Snmputil是一个命令行下的软件,使用语法如下: usage: snmputil get|getnext| ...
- Python学习笔记:外部数据的输入、存储等操作
查看current工作路径: >>> import os >>> os.getcwd() 'D:\\python' 更改工作路径: >>> os. ...
- Kotlin 的函数定义和使用 (译文 转)
Kotlin 的函数定义和使用 函数声明Kotlin 中的函数使用 fun 关键字声明 fun double(x: Int): Int {}函数用法调用函数使用传统的方法 val result = d ...
- SQLServer备份计划制定
SQLServer备份计划制定 一.备份计划制定 管理-->维护计划-->维护计划向导: 可选择全库备份.差异备份.事务日志备份 为保障数据的完整性:可采用备份策略1.数据量小的场景,数据 ...
- 我非要捅穿这 Neutron(一)网络实现模型篇
目录 文章目录 目录 前言 传统网络到虚拟化网络的演进 单一平面网络到混合平面网络的演进 Neutron 简述 Neutron 的网络实现模型 计算节点网络实现模型 内外 VID 转换 网络节点网络实 ...