问题标签 [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.
c - 当变量从数组末尾发生变化时,gdb 观察点将不起作用
此代码thing.after
因意外超出数组末尾而发生更改。我想尝试thing.after
使用 gdb 找到发生变化的行。所以我用 -g 编译,在第 12 行放一个断点,然后放一个观察点 on thing.after
,但是观察点没有触发,即使在第 14 行放一个断点确实表明thing.after
确实发生了变化。
我什至尝试获取地址thing.after
并在其上设置观察点,但它仍然没有触发。
memory - mips平台如何查看内存修改
我正在调试 MIPS 上的内存损坏问题。我想知道谁将某个值写入地址。
在 x86-64 中,我们可以使用 mprotect+sigsegv+sigtrap 来记录对指定地址的任何内存写访问。
如果我使用 mprotect,在 sigsegv 处理程序中,我必须取消保护内存,否则程序会不断触发信号处理程序。此外,在信号处理程序中,要知道将写入内存的值并不容易。
对于硬件观察点,它有类似的问题。异常将在写入内存之前而不是之后发生。
无论如何要知道将写入内存的值?而如果是期望值,我们是否可以再次保护内存并继续执行?
gdb - gdb 不会在 x86 cpu 的给定硬件观察点处停止
我已经用 gdb 调试了 QEMU。
为了跟踪意外的内存访问,我在特定地址设置了一个硬件观察点。但是,当地址中的值更改时,gdb 不会停止。这是我第一次在 gdb 中使用硬件观察点功能。
我不知道为什么会这样,并想解决这个问题。
以下是 gdb 控制台输出。
谢谢你,受雇的俄罗斯人。内存是用户空间并使用 MAP_PRIVATE 分配的,因此任何其他程序都不能更改它的内容。您能否告诉我替代工具来查找 QEMU 中更改值的部分,或者可以写入用户空间内存的系统调用?
android - Android Studio 中的 Java 字段观察点
一整天我都在尝试使用 Java Field Watchpoints 调试我的应用程序,设置在任何类型的字段上:string、int ...但它就是不会停止。我正在使用带有 4.4.2 android 和 2.0 Android Studio 的平板电脑。断点正常工作。
c - 为什么在交换二叉树节点时 GDB 观察点会停在不相关的行上?
我试图在二叉树中交换两个节点A
,B
以便它们实际存储在内存中的位置发生变化,但树拓扑没有改变。我添加了与父节点交换节点的特殊处理,但它似乎仍然不起作用。我将 Valgrind 与 vgdb 一起使用,以便我可以捕获内存错误并获得一致的地址。如果我有一棵树
然后我尝试交换A=40
,B=5c
链接搞砸了。具体来说,40->right
。在它()上设置一个观察点watch -l
,我发现它40->right
被设置为5c->right
(NULL
)memcpy
,但它也被更改为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 进程。c
Ctrl-d
kill
Ctrl-d
gdb - 使用 GDB 设置读写观察点?
我正在尝试追查不正确的运行时 cpu 功能报告的来源。我相当肯定它是由于C++“As-If-Broken”规则,该语言允许编译器采用正确的程序并将其转换为不正确的程序。
根据5.1.2 设置观察点:
为表达式设置观察点。当程序写入表达式 expr 并且其值发生变化时,gdb 将中断。此命令最简单(也是最流行)的用法是查看单个变量的值:
(gdb) 看 foo
请注意,观察点用于写访问,而不是读写访问。
我想在一个变量上设置一个读写访问的观察点,该变量在启动时在一个函数中设置一次__attribute__(constructor)
,然后在确定特性后多次读取。我想这样做以确认优化器正在删除调用,并可能确定有多少调用被删除。
如何使用 GDB 设置读写观察点?
gdb - 如何在 qemu 的来宾机器上使用 gdb 观察内存访问?
我可以在网上找到使用 gdb 访问内存地址的指令(Watch a memory range in gdb?),但是当我使用 qemu 时,我不知道如何处理客户机上的内存地址。
gdb - GDB 中的 break *main VS break main()
break *main
和break main()
本质上有什么区别?例如:
当我使用 break *main
and时watch x
,它是这样的:
但是当我使用break main()
and时watch x
,它是这样的:
为什么它们不同?本质上有什么区别?
当我观察一个数组时,如果我使用break main()
,它会出现:
但如果我使用break *main
,它不会出现,为什么?
c - C - 用程序集制作观察点
就像 gdb 对观察点所做的那样,我想以编程方式在 C 中放置一个观察点。我听说这可以通过汇编来实现。目前我只知道像这条指令这样的断点:
搜索后,可以使用 TUI 模式显示汇编指令并在我的程序中重用它,但它不起作用。
感谢帮助。
gdb - gdb 观察点,除非在特定位置触发?
我有一个变量被破坏。我想看看这是在哪里发生的,所以观察点是显而易见的选择,除了这个变量经常被设置(在这种情况下,处理网络数据包并且它为每个数据包设置一次)。我想从应该写入变量的位置免除观察点。基本上,我想要的是“如果 line_number != x 则观察变量”;gdb 文档在条件表达式上似乎有点薄,所以我不确定这是可能的......