zoukankan      html  css  js  c++  java
  • 《软件调试艺术》读后感六

    1、监视局部变量

        在GDB中,能够通过调用info locals命令得到当前桟帧中的全部局部变量的值的列表。

    2、直接检查内存

          在有些情况下。可能希望检查给定地址的内存,而不是通过变量的名称。

    GDB为这样的目的提供x命令。

          print和display的高级选项,print和display命令同意指定可选的格式。比如p /x y,这样会以十六进制格式显示,而不是十进制格式,其他经常使用的格式为c(字符)。s(字符串)。f(浮点数)。

           假设你想禁用某一个选项。GDB提供了dis命令,dis disp number假设条目你不记得,那你一定要使用info disp来查看条目。大家知道,假设有禁止。就肯定会有启用,启用命令当然是大家熟知的enable,如enable disp number,假设想全然删除某个条目。那么就要是用命令undisplay 如undisp number。

    3、给变量赋值

           GDB測试时使用set命令对变量赋值,比方 set x=12,这就是将x的值设置成12。

    GDB中能够使用set args命令设置程序的命令行參数。

    在调用run命令检查函数參数的命令info args。GDB还能够定义自己的变量,GDB的print命令的输出值被标为$1。$2。这些值统称为值历史。如$1=(struct node*)0x80496a8àprint tmp->left

           在调试链表时,有时须要查看链表中的每一个结点的值,这时能够使用GDB中的方便变量:设一个指针变量p。它在不同的时候指向链表中的不同节点。能够记录这个结点的值为set $q = p,后能够运行p *$q。这里的变量$q称为方便变量(convenience variable)。比如:

    w[4] = {12, 5, 8, 29}

    set $i = 0

    p w[$i++]

    4、程序崩溃处理

           程序崩溃通常是因为未经同意,訪问了内存单元,也就是我们经常看见的段错误,相信大家对段错误(Segment default)并不陌生。

    4.1 程序在内存中的布局


    4.2 信号含义

            操作系统有时发送信号给程序,信号发送的机制是操作系统将信号记录在进程表中,而不是实际上的发送信号。

    操作系统中的每种信号代表了不同的含义:

            SIGFDE信号:浮点异常导致、算数异常、溢出或除0。总线错误、对齐问题,物理内存不存在相应的信号是SIGBUS信号,SIGBUS会导致转存内存并终止。

    4.3 核心文件(core文件)

            大家应该都看到过这个文件。特别是那些使用gdb对安卓系统中的软件进行gcore的时候见的最多了,只是那个不是程序崩溃了,而是为了分析代码。

    有些信号表示让某个进程继续是妥当,甚至是不可能的,在这样的情况下,默认动作是提前终止进程,并编写一个名为核心文件(core file)的文件,俗称转储核心。

            核心文件包括程序崩溃时对程序状态的具体描写叙述,桟的内容(或者,假设程序是多线程的。则是各个线程的桟)。CPU寄存器的内容(多线程,则是线程的一组寄存器的值),程序静态分配变量的值(全局与static变量)

            File core能够查看这个特定核心文件的名称,在bash中,能够使用ulimit命令控制核心文件的创建。如:

            ulimit –c n : n是核心文件的最大大小,以千字节为单位。超过nKB的不论什么核心文件都不会被写。

    假设是创建随意大小的核心文件则:

            ulimit –c unlimited,ulimit – c能够检查核心文件。

    5、vim技巧

            假设使用vim进行project开发,是不是每次退出vim进行make比較麻烦,这里有个技巧能够避免退出vim,适用于单个没有makefile的代码。或者是有makefile的project。在vim的命令行直接输入:make就能够直接编译了,假设程序有错误,能够使用:cnext或者cprev命令查看错误。

    有没有认为非常方便。大笑大笑大笑

  • 相关阅读:
    基元线程同步构造之用户模式易变构造volatile
    C# 基元线程同步构造
    idea 的Low Memory问题
    python工具——xmind
    VSCODE 远程开发树莓派
    firefox临时文件位置及修改方法
    Veeam Backup & Replication 9.5 备份方式详解
    Windows下登录凭证密码获取工具
    VMProtect虚拟机保护分析入门
    Applescrip
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7353243.html
Copyright © 2011-2022 走看看