• 《软件调试的艺术》二书评


    1、   GDB调试基础

          GDB能够进行各种源线、代码地址、在输入行数量或功能等的源文档。原因GDB能够运行该文件可以进行调试,在源码编译成可运行文件时使用了gcc命令中的-g选项。这个选项告诉编译器。在编译成可运行文件是保留符号表。而符号表是GDB能够调试的关键,里面包括了源码和行号的相应关系。当GDB进行调试时能够看到调试的位置。GDB使用ctrl + x + a快捷键能够将gdb的界面改变成界面的形式,假设再次使用这个快捷键,则会切换回去。Ctrl + x + a的界面图:


    2、GDB中的暂停机制

    GDB调试中一共同拥有三种暂停机制,各自是:

    1、   断点:通知GDB在程序中特定位置暂停运行。

    2、   监视点:通知GDB当特定内存位置或者涉及一个或多个位置的表达式的值发生变化时暂停运行。

    3、   捕获点:通知GDB当特定事件发生时暂停运行。

    3、断点设置

    通过break命令:

    break function:意思是在函数function的入口(第一行可运行代码)处设置断点。

    breakline-number:在当前活动源码文件的line-number处设置断点。

    对于多文件程序,当前活动窗体要么是上次使用list命令查看内容的文件。要么是包括main函数的文件。

    breakfilename:line-number:在源码文件filename的line-number处设置断点。假设filename不再当前工作文件夹中。则能够给出相对路径名或者全然路径名来帮助GDB查找该文件。如: break source/bed.c:35

    break filename:function:在文件filename中的函数function入口处设置断点。重载函数或者使用同名静态函数的程序能够须要使用这样的形式:break bed.c:parseArguments.

    其他break參数:

    1、   使用break + offset或break – offset,能够在当前选中桟帧中正在运行的源码行前面或后面设置断点偏移行数。

    2、    break *address这样的形式可用来在虚拟内存地址处设置断点。

    这样的对于程序没有调试信息的部分(比方当源码不可用时,或者对于共享库)是必须的。

    暂时断点tbreak

    暂时断点是首次到达后就会自己主动删除的断点,使用tbreak设置暂时断点。

    rbreak

            rbreak命令採用grep风格的正則表達式。如rbreak func*会将断点放在名为func和funcc的函数上。而不会放在function上,其次,在rbreak的參数前面或后面有一个暗指的.*,因此,假设不希望rbreak func在afunc上设置断点,应当使用rbeak ^func。

    4、断点总结:

           假设在同一个位置设置了多个断点。那么执行GDB时。仅仅会在这个位置触发一次中断。除法中断的断点将是标识符编号最小的断点。

          GDB实际上是使用机器语言指令工作的,可是有了增强的符号表。GDB表现出了使用代码行的错觉。实际上,有时代码经过优化之后,GDB会跳过无用代码,所以GDB有时会给我们产生一种错觉感。

          当断点被设置时,断点就会被标识成从1開始的一个整数,这个标识是这个标号的一个记号。从開始到最后,这个标号就代表这个这个标号。假设忘记标号能够使用Info breakpoints 或者简写的info bp命令进行查看。

    5、焦点

    焦点也就是前面所说的活动文件,调试可运行文件时,初始的活动文件是main函数文件。

    改变焦点的方法有例如以下几种:

    1、    向不同的源文件应用list命令。

    2、    进入位于不同的源码文件。

    3、    当您在不同的源文件运行代码GDB遇到断点。

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    剑桥雅思写作高分范文ESSAY37
    剑桥雅思写作高分范文ESSAY36
    剑桥雅思写作高分范文ESSAY35
    剑桥雅思写作高分范文ESSAY34
    剑桥雅思写作高分范文ESSAY33
    剑桥雅思写作高分范文ESSAY32
    剑桥雅思写作高分范文ESSAY31
    Python 案例 004 (计算当前时间是一年中的第几天)
    Python案例 003 (一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数)
    Python 案例002(获取不同数据区间的和)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4794017.html
Copyright © 2020-2023  润新知