《软件调试艺术》读后感四

1、条件断点

仅仅有符合某种条件时才在断点处停止。

类似于监视点的工作方式,每当该变量的值发生变化时,监视点都会中断。条件断点仅仅会在怀疑有问题的代码处当变量呈现该怀疑值时才中断。

设置条件断点:breakbreak-args if (conditon)如:break if (i==700) condition 6999

条件能够是:

1、         相等、逻辑和不想等运算符(<,<=,==,!=、,>。>=。&&,||等)如break 180 if string == null && I < 0

2、         按位和以为运算符等(&,|,^。>>,<<等)如break test.c:34 if(x & y) == 1

3、         算术运算(+,-,*。/,%)如break myfunc if i % (j + 3) != 0

自己写的函数、或库函数经过链接之后都能够调用,比方在这样的环境中。能够用if strlen(mystring) == 0等作为推断,自己写的函数也是一个道理。

正常断点是无条件操作,而条件断点是有条件操作,条件达到之后才干暂停。

2、断点命令列表

使用commands命令设置命令列表:

Commandsbreakpoint-number

……

commands

……

end

比如:

$gdb Fibonacci

break Fibonacci

commands 1

printf  “Fibonacciwas passed %d.\n”, n

end

假设认为输出太冗余,能够使用silent命令,它须要在命令列表的第一个输入,使用GDB更安静地触发断点。

如:

command 1

silent

printf “…….”

end假设命令列表中的最后一个命令是continue。GDB将在完毕命令列表中的命令后继续自己主动运行程序。

3、宏的创建

假设你的这些命令还会在其他程序中使用,那么你能够使用GDB中的define命令创建宏。

创建宏print-and-go:

define print-and-go=> 长久保存则将其放在.gdbinit文件里。

printf $arg0,arg1

continue

end

这里假设要给它传送參数,则參数之间没有不论什么的符号。查看宏使用show user命令,能够得到全部的宏列表。

时间: 2024-11-08 22:00:13

《软件调试艺术》读后感四的相关文章

《软件调试艺术》读后感一

1.预备知识 在进入正题之前要对GDB有一个大概的了解,GDB能干什么?GDB现在的实用性还有多少?等问题,我们带着这样的问题去书中探索,这样会使我们学到更多的东西. 首先,我看一张图,这张图不是我画的,但是这张图基本涵盖了<软件调试艺术>这本书的所有内容.也就是这本书的浓缩版,精华版. 这本书主要以GDB调试软件为基础进行讲解,可能在此之前我们大家对调试并不关注,或者都没有觉得调试有多重要.我们总是写代码,这些代码的工程比较小,代码量少,所以调试工具没有太大的帮助.如果我们的程序非常的大,并

《软件调试艺术》读后感七

1. 线程调试 对线程的调试用的最多的可能是thread命令了,查看程序中有多少线程使用Infothreads,进入到某个线程的内部使用thread count,这样就可以进入到count线程的内部.线程调试中用的最多的还有就是bt命令,这个命令主要是查看线程的桟信息,光看桟信息还是差了点什么,那就是使用frame count命令,这个命令可以在桟帧之间移动,如果要查看这个桟的源代码就用到之前我们使用的list.在frame中使用的多的还有up和down命令,可以顺序切换桟的frame. GDB

《软件调试艺术》读后感六

1.监视局部变量 在GDB中,可以通过调用info locals命令得到当前桟帧中的所有局部变量的值的列表. 2.直接检查内存 在有些情况下,可能希望检查给定地址的内存,而不是通过变量的名称.GDB为这种目的提供x命令. print和display的高级选项,print和display命令允许指定可选的格式.例如p /x y,这样会以十六进制格式显示,而不是十进制格式,其它常用的格式为c(字符),s(字符串),f(浮点数). 如果你想禁用某一个选项,GDB提供了dis命令,dis disp nu

《软件调试艺术》读后感二

1.   GDB调试基础 GDB可以对各种源代码行.代码地址.源代码文件中的行号或函数的入口等.之所以GDB可以对可执行文件进行调试,是因为在源代码编译成可执行文件时使用了gcc命令中的-g选项,这个选项告诉编译器,在编译成可执行文件是保留符号表.而符号表是GDB能够调试的关键,里面包含了源代码和行号的对应关系,当GDB进行调试时可以看到调试的位置.GDB使用ctrl + x + a快捷键可以将gdb的界面改变成界面的形式,如果再次使用这个快捷键,则会切换回去.Ctrl + x + a的界面图:

《软件调试艺术》读后感五

1.命令+条件中断和监视点的使用 1.1   监视点 监视点是指示GDB每当某个表达式改变了只,就暂停执行指令.如watch i它会使得每当i改变值时GDB就暂停.也可以使得watch后面的更复杂如:watch (I | j > (2) && I > 24) && strlen(name)> 6这是将监视点看作"附加"在表达式上,当表达式的值改变时,GDB会暂停程序的执行. 1.2   监视点和断点的区别 断点与源代码中的一个位置关联,

《软件调试艺术》读后感三

1. GDB调试技 在谈这个问题前我们有没有遇到过这种场景,每次要改动一次代码,然后make,之后gdb调试,然后出gdb中quit,再次改动再次make再次gdb进入再次quit一直反复着一个工作.那有没有方法能够避免这种反复事情呢?毕竟程序猿对这种反复的步骤非常反感. 避免的方法例如以下:在我们对代码改动和编译时另外开一个窗体,这个窗体专门用来改动和编译.GDB调试窗体不要关闭.当在gdb命令行以下输入run(r)命令时.gdb可以又一次载入新编译的程序. 这时里面设置的断点都还存在,这里的

《软件调试的艺术》笔记--停下来环顾程序

1.断点列表 创建的每个断点(包括断电.监视点和捕获点)都标识为从1开始的唯一整数标识符.这个标识符用来执行该断点上的各种 操作.调试器还包含一种列出所有断点及其属性的方法. 调试下面的代码:(代码1) #include <stdio.h> void display(int i) { i = i + 1; printf("i = %d\n",i); } int main(void) { int i = 1; display(i); return 0; } 设置断点--显示断

《软件调试的艺术》笔记--预备知识

1.gcc的-g选项 如果要使用gdb进行调试,必须在编译时在gcc中加入-g选项,使用参数 -g 表示将源代码信息编译到可执行文件中. 如果不使用-g选项: #include <stdio.h> int main(void) { int i = 1; i = i + 1; printf("i = %d\n",i); return 0; } gcc main.c gdb a.out (gdb) b main Breakpoint 1 at 0x4004f8 (gdb) r

《软件调试的艺术》笔记--调试多线程程序

下面是于线程相关的GDB命令用法汇总: info threads:给出关于当前所有线程的信息. thread 3:改成线程3. break 88 thread 3 :当线程到达源代码88时停止执行. break 88 thread 3 if i == 2 当线程3到达源代码行88行,并且变量i的值为2时停止执行. 对下面的多线程进行调试: #include <stdio.h> #include <pthread.h> #include <string.h> #inclu