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编程一站式学习》的更多相关文章

  1. GDB笔记

    GDB是在Linux命令行下对C/C++的程序进行调试常用的一个命令,现将平时记录在本子上的笔记整理如下: 一.断点 断点类型有breakpoints, watchpoints, catchpoint ...

  2. c语言,gdb

    Get gdb call stack http://blog.csdn.net/zoufeiyy/article/details/1490241 Debugging with GDB - Examin ...

  3. GDB调试基础

    GDB调试基础 https://lesca.me/archives/gdb-basic-knowledge.html GDB笔记(二):条件断点.命令列表.监视点 https://lesca.me/a ...

  4. GDB调试笔记

    参考资料:GDB调试精粹及使用实例 # 调试实例 #include <iostream> #include <cstring> using namespace std; ][] ...

  5. ubuntu: qemu+gdb 调试linux kernel 学习笔记

    声明: 本笔记内容并非本人原创,90%来自网络资料的整合.同时,由于自己是刚刚接触qemu & gdbserver remote debug,本文也就算不得教程,仅供有缘人参考而已. ---- ...

  6. 用gdb调试程序笔记: 以段错误(Segmental fault)为例

    用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...

  7. 《软件调试的艺术》学习笔记——GDB使用技巧摘要

    <软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...

  8. 手把手教你使用eclipse+qemu+gdb来单步调试ARM内核【学习笔记】

    平台信息:linux4.0 平台:qemu 作者:庄泽彬 说明:笨叔叔的Linux视频的笔记 一.编译linux源码 export CROSS_COMPILE=arm-linux-gnueabi- e ...

  9. gdb使用笔记

    相关编译选项: 1.-g 开启gdb 2.-o0,o2  o0表示不优化, 3. -funsigned-char -fdata-sections 会使compiler为每个function和data ...

随机推荐

  1. 《剑指offer》算法题第四天

    今日题目: 二进制中1的个数 数值的整数次方 调整数组顺序使奇数位于偶数前面 链表中倒数第K个节点 链表中环的入口节点 今天的题目都比较简单,但是前三道题都有不同的解法,4,5两题就不在这边讨论了,其 ...

  2. Ubuntu下搜狗输入法乱码

    本文适用于Ubuntu 16.04,造冰箱的大熊猫@cnblogs 2018/10/10 参考<这里>,可以不用重新登录 这个问题时不时的出现,很烦人,最简单最粗暴的解决的方法是将&quo ...

  3. 5.JavaBean

    JavaBean JSP开发初期HTML,css,java代码混杂在一起,给程序的调试和维护带来很大困难.将与HTML分离并将对象和逻辑java代码封装成类就是一个JavaBean组件. 1.Java ...

  4. JDK_API剖析之java.io包

    Java的核心库java.io提供了全面的IO接口.包括:文件读写.标准设备输出等.Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入. 一.接口 1.Closea ...

  5. 2-sat基础详解

    (大量引用<2-SAT解法浅析 -by 华中师大一附中 赵爽><由对称性解2-SAT问题> Great_Influence关于P4782 [模板]2-SAT 问题的题解.在此对 ...

  6. TCP定时器 之 重传定时器

    注:这部分还没有完全分析透彻,先在此记录,后面回顾的时候再进行补充: 启动定时器: (1) 之前发送的数据段已经得到确认,新发出一个数据段之后设定: (2) 新建连接发送syn之后设定: (3) PM ...

  7. 191022Django模板

    一.变量和句点符深度查找 字符串变量引用 def show_time(request): now_time = datetime.datetime.now() return render(reques ...

  8. leetcode-easy-listnode-19 remove nth node from end of list

    mycode  88.29% 关键是一定要head前新建一个节点,否则要分类讨论很多次来避免slow或者fast出现None.next的错误 # Definition for singly-linke ...

  9. UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)

    UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...

  10. css中相对定位和绝对定位

    相对定位: #box_relative { position: relative; left: 30px; top: 20px; } 绝对定位: #box_relative { position: a ...