GDB再学习:断点调试之硬断点
Posted Stoneshen1211
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDB再学习:断点调试之硬断点相关的知识,希望对你有一定的参考价值。
1 硬件断点
在嵌入式系统中,如果想调试的程序不是位于内存中,而是位于像闪存这样的存储器中,此时就无法使用软件程序断点了,因为闪存中的内容并不像内存那样方便更改。
此时只能使用硬件程序断点来调试程序。硬件程序断点的实现原理与软件程序断点完全不同,断点时通过配置处理器的断点寄存器的方式来实现的。
当处理器运行到断点寄存器所指示位置的指令时就会产生中断,调试工具通过该中断使我们获得干预的机会。处理器所能设置的硬件程序断点数量是有限的,可能最多也就4个。
以上引用自《专业嵌入式软件开发 全面走向高质高效编程》
目前的ARM7/ARM9内部硬件能够提供两组寄存器来存储断点信息,所以最多可以支持两个硬件断点,而ARM11则最多可以支持8个硬件断点。
2 程序准备
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <stdlib.h>
int j = 0;
int test2()
{
char* s8Buf = NULL;
strcpy(s8Buf, "8888");
return 0;
}
int main()
{
int i = 0;
for (i = 0; i < 60; i++)
{
j++;
printf("-------->index %d\\n", i);
sleep(1);
}
test2();
return 0;
}
3 指令介绍
3.1 设置硬断点 hbreak
hbreak和break的使用方式一致。
如下,设置23行断点:
(gdb) start
Temporary breakpoint 1 at 0x40058f: file test_gdb.c, line 19.
Starting program: /home/test_demo/gdb/test_gdb
Temporary breakpoint 1, main () at test_gdb.c:19
19 int i = 0;
(gdb) hbreak 23
Hardware assisted breakpoint 2 at 0x40059f: file test_gdb.c, line 23.
(gdb) continue
Continuing.
Breakpoint 2, main () at test_gdb.c:23
23 j++;
(gdb) continue
Continuing.
-------->index 0
Breakpoint 2, main () at test_gdb.c:23
23 j++;
(gdb) continue
Continuing.
-------->index 1
Breakpoint 2, main () at test_gdb.c:23
23 j++;
(gdb) continue
Continuing.
-------->index 2
Breakpoint 2, main () at test_gdb.c:23
23 j++;
(gdb) continue
Continuing.
-------->index 3
Breakpoint 2, main () at test_gdb.c:23
23 j++;
(gdb)
3.2 设置一次有效硬断点 thbreak
thbreak和tbreak的使用方式一致,这里不再赘述。
以上是关于GDB再学习:断点调试之硬断点的主要内容,如果未能解决你的问题,请参考以下文章