问题标签 [watchpoint]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1563 浏览

c - 当变量从数组末尾发生变化时,gdb 观察点将不起作用

此代码thing.after因意外超出数组末尾而发生更改。我想尝试thing.after使用 gdb 找到发生变化的行。所以我用 -g 编译,在第 12 行放一个断点,然后放一个观察点 on thing.after,但是观察点没有触发,即使在第 14 行放一个断点确实表明thing.after确实发生了变化。

我什至尝试获取地址thing.after并在其上设置观察点,但它仍然没有触发。

0 投票
0 回答
163 浏览

memory - mips平台如何查看内存修改

我正在调试 MIPS 上的内存损坏问题。我想知道谁将某个值写入地址。

在 x86-64 中,我们可以使用 mprotect+sigsegv+sigtrap 来记录对指定地址的任何内存写访问。

如果我使用 mprotect,在 sigsegv 处理程序中,我必须取消保护内存,否则程序会不断触发信号处理程序。此外,在信号处理程序中,要知道将写入内存的值并不容易。

对于硬件观察点,它有类似的问题。异常将在写入内存之前而不是之后发生。

无论如何要知道将写入内存的值?而如果是期望值,我们是否可以再次保护内存并继续执行?

0 投票
2 回答
582 浏览

gdb - gdb 不会在 x86 cpu 的给定硬件观察点处停止

我已经用 gdb 调试了 QEMU。

为了跟踪意外的内存访问,我在特定地址设置了一个硬件观察点。但是,当地址中的值更改时,gdb 不会停止。这是我第一次在 gdb 中使用硬件观察点功能。

我不知道为什么会这样,并想解决这个问题。

以下是 gdb 控制台输出。


谢谢你,受雇的俄罗斯人。内存是用户空间并使用 MAP_PRIVATE 分配的,因此任何其他程序都不能更改它的内容。您能否告诉我替代工具来查找 QEMU 中更改值的部分,或者可以写入用户空间内存的系统调用?

0 投票
1 回答
2515 浏览

android - Android Studio 中的 Java 字段观察点

一整天我都在尝试使用 Java Field Watchpoints 调试我的应用程序,设置在任何类型的字段上:string、int ...但它就是不会停止。我正在使用带有 4.4.2 android 和 2.0 Android Studio 的平板电脑。断点正常工作。

0 投票
1 回答
49 浏览

c - 为什么在交换二叉树节点时 GDB 观察点会停在不相关的行上?

我试图在二叉树中交换两个节点AB以便它们实际存储在内存中的位置发生变化,但树拓扑没有改变。我添加了与父节点交换节点的特殊处理,但它似乎仍然不起作用。我将 Valgrind 与 vgdb 一起使用,以便我可以捕获内存错误并获得一致的地址。如果我有一棵树

然后我尝试交换A=40B=5c链接搞砸了。具体来说,40->right。在它()上设置一个观察点watch -l,我发现它40->right被设置为5c->rightNULLmemcpy,但它也被更改为A以后,if(a_l.left == b){这显然是不可能的。在我使用movq而不是movb在组装之前,我有一个观察点报告了这样的错误行,但我很确定这次我的尺寸是正确的,因为我一开始没有,而且它没有通过任何交换,但我修复了它,现在它通过了大约十几个。我在每次操作后都会检查树,所以错误就在这里。这是我可以管理的最简单的演示:

为什么 GDB 会停在错误的行上?我认为这可能与我使用 vgdb 的事实有关:当我单步执行时它也会跳过一些行。另外,为什么要a->right第二次更改?谢谢你。

gcc -g -o main main.c您可以通过执行, valgrind --vgdb=yes --vgdb-error=0 ./main&, gdb main, tar rem | vgdb, b avl_swap_nodes, c,来使该文件与合理的最新版本的 gcc、gdb 和 valgrind 一起运行,然后通过反复执行 then或thenwatch -l a->right来巧妙地摆脱 vgdb 进程。cCtrl-dkillCtrl-d

0 投票
1 回答
365 浏览

gdb - 使用 GDB 设置读写观察点?

我正在尝试追查不正确的运行时 cpu 功能报告的来源。我相当肯定它是由于C++“As-If-Broken”规则,该语言允许编译器采用正确的程序并将其转换为不正确的程序。

根据5.1.2 设置观察点

为表达式设置观察点。当程序写入表达式 expr 并且其值发生变化时,gdb 将中断。此命令最简单(也是最流行)的用法是查看单个变量的值:

(gdb) 看 foo

请注意,观察点用于写访问,而不是读写访问。

我想在一个变量上设置一个读写访问的观察点,该变量在启动时在一个函数中设置一次__attribute__(constructor),然后在确定特性后多次读取。我想这样做以确认优化器正在删除调用,并可能确定有多少调用被删除。

如何使用 GDB 设置读写观察点?

0 投票
1 回答
1408 浏览

gdb - 如何在 qemu 的来宾机器上使用 gdb 观察内存访问?

我可以在网上找到使用 gdb 访问内存地址的指令(Watch a memory range in gdb?),但是当我使用 qemu 时,我不知道如何处理客户机上的内存地址。

0 投票
1 回答
6837 浏览

gdb - GDB 中的 break *main VS break main()

break *mainbreak main()本质上有什么区别?例如:

当我使用 break *mainand时watch x,它是这样的:

但是当我使用break main()and时watch x,它是这样的:

为什么它们不同?本质上有什么区别?

当我观察一个数组时,如果我使用break main(),它会出现:

但如果我使用break *main,它不会出现,为什么?

0 投票
1 回答
394 浏览

c - C - 用程序集制作观察点

就像 gdb 对观察点所做的那样,我想以编程方式在 C 中放置一个观察点。我听说这可以通过汇编来实现。目前我只知道像这条指令这样的断点:

搜索后,可以使用 TUI 模式显示汇编指令并在我的程序中重用它,但它不起作用。

感谢帮助。

0 投票
1 回答
243 浏览

gdb - gdb 观察点,除非在特定位置触发?

我有一个变量被破坏。我想看看这是在哪里发生的,所以观察点是显而易见的选择,除了这个变量经常被设置(在这种情况下,处理网络数据包并且它为每个数据包设置一次)。我想从应该写入变量的位置免除观察点。基本上,我想要的是“如果 line_number != x 则观察变量”;gdb 文档在条件表达式上似乎有点薄,所以我不确定这是可能的......