中文名 | 断点 | 外文名 | breakpoint |
---|---|---|---|
分 类 | 计算机调试 |
常用的断点包括:INT3断点、硬件断点、内存断点、消息断点、条件断点等。
中文词条名:断点
英文词条名:break-point
断点是一个信号,它通知调试器,在某个特定点上暂时将程序执行挂起。当执行在某个断点处挂起时,我们称程序处于中断模式。 进入中断模式并不会终止或结束程序的执行。执行可以在任何时候继续。
CPU有一个单独的执行序列,会一条指令一条指令的顺序执行。要处理类似IO或者硬件时钟这样的异步事件时CPU就要用到中断。硬件中断通常是一个专门的电信号,连接到一个特殊的“响应电路”上。这个电路会感知中断的到来,然后会使CPU停止当前的执行流,保存当前的状态,然后跳转到一个预定义的地址处去执行,这个地址上会有一个中断处理例程。当中断处理例程完成它的工作后,CPU就从之前停止的地方恢复执行。
断点模式可以看作一种超时。所有元素(例如,函数、变量和对象)都保留在内存中,但它们的移动和活动被挂起了。在中断模式下,您可以检查它们的位置和状态,以查看是否存在冲突或 bug。您可以在中断模式下对程序进行调整。例如,可以更改变量的值。可以移动执行点,这会改变执行恢复后将要执行的下一条语句。在 C 、C# 和 Visual Basic 中,甚至可以在中断模式下对代码本身进行更改(使用一种称为“编辑并继续”的强大功能)。
断点提供了一种强大的工具,使您能够在需要的时间和位置挂起执行。与逐句或逐条指令地检查代码不同的是,可以让程序一直执行,直到遇到断点,然后开始调试。这大大地加快了调试过程。没有这个功能,调试大的程序几乎是不可能的。
断点也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时间。
解决方法及步骤:打开Devcpp,点击菜单-文件-新建-项目,打开“新项目”对话框。2. 选择 Console Application,语言选择c++,名称输入DevcppDemo。3. ...
为什么要打断?
那种电笔是感应式电笔,断点测试和直接测验各有一个按钮,用来测量电压时,按住直接测验按钮,再用笔尖接触火线就可以测量电压,电压会显示在液晶屏上。如果用来测量一段通电绝缘导线内部的断点时,按住断点测试按钮...
自制简易线路断点检测装置
1.显示当前gdb的断点信息:
(gdb) info break
他会以如下的形式显示所有的断点信息:
Num Type Disp Enb Address What
1 breakpoint keep y 0x000028bc in init_random at qsort2.c:155
2 breakpoint keep y 0x0000291c in init_organ at qsort2.c:168
删除指定的某个断点:
(gdb) delete breakpoint 1
该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点
(gdb) delete breakpoint
禁止使用某个断点
(gdb) disable breakpoint 1
该命令将禁止断点1,同时断点信息的 (Enb)域将变为 n
允许使用某个断点
(gdb) enable breakpoint 1
该命令将允许断点1,同时断点信息的 (Enb)域将变为 y
清除源文件中某一代码行上的所有断点
(gdb)clear number
注:number 为源文件的某个代码行的行号
2.设置条件断点
例子:
#includeintmain(void) { inti=0; intsum=0;for(i=1;i<=200;i ) { sum =i; }printf("%d ",sum); return0; }
gdb可以设置条件断点,也就是只有在条件满足时,断点才会被触发,命令是“break … if cond”。以上面程序为例:
(gdb)start Temporarybreakpoint1at0x4004cc:filea.c,line5. Startingprogram:/data2/home/nanxiao/aTemporarybreakpoint1,main()ata.c:5 5inti=0; (gdb)b10ifi==101 Breakpoint2at0x4004e3:filea.c,line10. (gdb)r Startingprogram:/data2/home/nanxiao/aBreakpoint2,main()ata.c:10 10sum =i; (gdb)psum $1=5050
可以看到设定断点只在i的值为101时触发,此时打印sum的值为5050。
break命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式:
break line-number 使程序恰好在执行给定行之前停止。
break function-name 使程序恰好在进入指定的函数之前停止。
break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。
break routine-name 在指定例程的入口处设置断点
如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置断点,其方法如下:
(gdb) break filename:line-number
(gdb) break filename:function-name
要想设置一个条件断点,可以利用break if命令,如下所示:
(gdb) break line-or-function if expr
例:
(gdb) break 46 if testsize==100
从断点继续运行:continue 命令
在字符发生器面板的右上方,Step键的下面,可插入一个中断点检查程序运行到该处的结果等。要想在程序中设制中断点,首先要在16进制宇信号编辑窗内(宇信号编辑窗)选择一个单元,然后单击Breakpoint键,断点就设制完成。当字符发生器按照地址顺序轮流输出各单元的宇时,遇到中断点单元就会自动停止(中断)码流的输出。如果是周期性的输出方式,需要单击Cycle键才会继续输出;如果是猝发输出方式,需单击Burst才会继续。要取消一个中断点,点击字信号编辑窗中设置的中断点单元即可。电子仿真工作台允许设置多个中断点,中断点功能键设置的断点只对周期性Cycle输出和猝发性Burst输出码流有效。