gdb watch的使用

https://www.cnblogs.com/lonelycatcher/archive/2011/10/09/2204865.html

例子:

[root@localhost ~/test/test_2]
# cat -n test.c  
     1	#include <stdio.h>
     2	
     3	int
     4	main(int argc, char *const argv[])
     5	{
     6	    int i = 0;
     7	    int a = 0;
     8	
     9	    for (i = 0; i < 10; i++) {
    10	        a += i; 
    11	    }
    12	    return 0;
    13	}

编译:

[root@localhost ~/test/test_2]
# gcc -g test.c -o test
[root@localhost ~/test/test_2]
# ls
test  test.c  

运行gdb并使用watch

[root@localhost ~/test/test_2]
# gdb ./test
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/test/test_2/test...done.
(gdb) list
1	#include <stdio.h>
2	
3	int
4	main(int argc, char *const argv[])
5	{
6	    int i = 0;
7	    int a = 0;
8	
9	    for (i = 0; i < 10; i++) {
10	        a += i; 
(gdb) break 7
Breakpoint 1 at 0x400502: file test.c, line 7.
(gdb) r
Starting program: /root/test/test_2/./test 

Breakpoint 1, main (argc=1, argv=0x7fffffffe5a8) at test.c:7
7	    int a = 0;
Missing separate debuginfos, use: debuginfo-install glibc-2.17-260.el7.x86_64
(gdb) watch a
Hardware watchpoint 2: a
(gdb) c
Continuing.
Hardware watchpoint 2: a

Old value = 0
New value = 1
main (argc=1, argv=0x7fffffffe5a8) at test.c:9
9	    for (i = 0; i < 10; i++) {
(gdb) c
Continuing.
Hardware watchpoint 2: a

Old value = 1
New value = 3
main (argc=1, argv=0x7fffffffe5a8) at test.c:9
9	    for (i = 0; i < 10; i++) {
(gdb) c
Continuing.
Hardware watchpoint 2: a

Old value = 3
New value = 6
main (argc=1, argv=0x7fffffffe5a8) at test.c:9
9	    for (i = 0; i < 10; i++) {
(gdb) c
Continuing.
Hardware watchpoint 2: a

Old value = 6
New value = 10
main (argc=1, argv=0x7fffffffe5a8) at test.c:9
9	    for (i = 0; i < 10; i++) {
(gdb) quit
A debugging session is active.

	Inferior 1 [process 7014] will be killed.

Quit anyway? (y or n) y
[root@localhost ~/test/test_2]

总结:
使用gdb的watch功能,需要break、run、watch和continue结合起来使用。
1、先使用break把断点设置到变量定义处;
2、运行run命令,使程序执行到断点处;
3、使用watch命令来观察变量,变量一旦发生变化就显示出来;
4、使用continue继续运行,并观察watch显示的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: gcc 是一个编译器,而 gdb 是一个调试器。通过使用 gdb,您可以在程序运行时跟踪其执行并调试它。以下是使用 gcc 的 gdb 的一些基本步骤: 1. 编译您的程序时,确保使用 -g 标志来启用调试信息,例如:gcc -g myprogram.c -o myprogram 2. 运行 gdb,例如:gdb myprogram 3. 在 gdb 命令行上输入 run 来启动程序 4. 在程序运行时,您可以使用许多 gdb 命令来跟踪程序的执行,例如: - break <function>:在函数开始处设置断点 - step:执行当前行并进入函数 - next:执行当前行但不进入函数 - print <variable>:打印变量的值 - watch <variable>:在变量更改时停止程序 - continue:从当前断点处继续执行程序 5. 在调试过程中,您可以使用许多其他 gdb 命令来了解程序的状态和跟踪它的执行。可以通过输入 help 命令来查看 gdb 的完整命令列表。 希望这可以帮助您开始使用 gcc 的 gdb 进行程序调试! ### 回答2: gcc是一种常用的编译器,而gdb是gcc的调试工具。下面是使用gdb进行调试的简单步骤: 1. 使用gcc编译源代码时添加`-g`选项。这个选项会在可执行文件中添加调试信息。 2. 运行可执行文件前,输入`gdb 可执行文件名`进入gdb的交互式界面。 3. 在gdb的命令行中,可以使用一些常用的命令来调试程序。例如: - `break 行号` 在指定行设置断点。 - `run` 开始运行程序。 - `continue` 继续执行程序。 - `next` 单步执行一行,并跳过函数调用。 - `step` 单步执行一行,包括函数调用。 - `print 变量名` 打印变量的值。 - `quit` 退出gdb。 4. 在程序运行到断点处时,可以使用一些命令来观察程序的状态: - `backtrace` 打印函数调用栈。 - `info locals` 打印当前函数的局部变量。 - `info breakpoints` 打印当前设置的断点。 - `info registers` 打印寄存器的值。 5. 在调试过程中,可以随时使用gdb的命令来控制程序的执行流程,查看变量的值以及其他调试信息。 gdb是一种功能强大的调试工具,还提供了很多其他的调试功能,如条件断点、观察点等。通过熟悉和灵活使用gdb,可以更高效地进行程序调试和错误定位。 ### 回答3: gcc是一个开源的编译器套件,gdb是其中的一个调试器。通过gdb,我们可以进行程序的调试、运行和分析。 首先,我们需要在编译时加上-g选项,以便生成调试信息。例如,使用以下命令编译一个名为test的C程序: gcc -g -o test test.c 接下来,我们可以使用以下命令启动gdb调试器: gdb test 一旦进入gdb调试器界面,我们可以使用一系列的命令来控制程序的执行和监视程序状态。下面是一些常用的gdb命令: 1. break [行号/函数名]:设置断点,程序会在指定的行或函数处停止执行。 2. run [参数]:运行程序,可以传递命令行参数。 3. step:单步执行程序,一次执行一条语句,并进入函数内部。 4. next:单步执行程序,一次执行一条语句,不进入函数内部。 5. continue:继续执行程序,直到下一个断点或程序结束。 6. print [变量名]:打印变量的值。 7. watch [变量名]:监视变量的值变化。 8. backtrace:显示函数调用链。 9. quit:退出gdb调试器。 除了基本的调试命令外,gdb还提供了更多的调试功能,如条件断点、内存查看、修改变量值等。可以使用gdb的帮助命令(help)查看更多详细的信息和用法。 总结而言,使用gcc的gdb调试器可以帮助开发人员定位和解决程序中的错误,提高调试效率。对于C或C++程序的调试工作来说,gdb是一个非常有用和强大的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值