问题标签 [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.
gdb - gdb 的 rwatch 的 lldb 等价物是什么?
我处于读取观察点非常方便的情况。查看 lldb 的帮助,我可以找到该watchpoint
命令,但它似乎只支持写入观察点(公认的一般来说更有用,但在我的情况下不会这样做)。
我知道 gdb 有一个rwatch
设置读取观察点的命令。lldb有什么等价物吗?
gdb - 由于损坏,如何使用 gdb 免费观看固定内存
我有一个包含接口详细信息的指针数组。例如
创建接口时已为指针分配内存。例如
经过一系列操作后, 的值gapIfTable[14]
变为NULL(0x0)
。我想看看,程序的哪一部分在释放内存。我是否可以 gapIfTable[14]
使用
我希望我的程序在上述内存地址变为时停止在 gdb 上NULL
,以便我可以在 Gdb 中进行回溯以找到罪魁祸首。我正在运行一个多线程程序。
如果我的理解有误,请指正。如果我错了,请帮助我解决一些问题。
c - GNU GDB:自定义观察点输出格式
每次修改观察点时,GDB 都会打印旧值和新值。但是,有时我不想以默认的十进制整数格式打印该值:例如,如果我正在观察*(unsigned*)$ebp
调试可能的堆栈溢出(哇,SO...),除非以十六进制显示,否则该值是无意义的格式(例如p/x
打印某些内容时)。
是否可以为特定观察点设置显示格式?谢谢。
c++ - GDB 在实例向量中观察类成员
这是我的课程的一个极其简化的版本:
我MyClass
在 main 中创建一个实例向量:
有一些内存损坏(我认为)错误导致我的程序崩溃。我观察到MyClass::sizeDesired
程序崩溃时的值是垃圾。所以,我想为每个MyClass:sizeDesired
成员设置一个观察点,这样我就可以准确地看到这些成员的值何时发生变化。
使用 GDB,我该怎么做?
当我在将所有实例推送到主要实例后中断时MyClass
,std::vector<MyClass>
我会这样做
但 GDB 只是挂起。它不显示新的命令提示符(即,它不显示(gdb)
在后续行上......只是一个空白行,似乎没有发生任何事情)。
我对基于非 GDB 的解决方案持开放态度。如果在 GDB 中无法进行这种类型的检查/监控,是否可以使用替代工具?
static - 本地静态内存写入的观察点?
我想在静态本地设置一个观察点s_db
:
我试过用 设置观察点file::function::name
,但它给我带来了麻烦:
为了完整起见,我使用 构建-O0 -g3
,因此甚至可以使用符号常量名称。
如何为静态本地上的写入设置观察点s_db
?
gdb - GDB 观察点实现
我正在为 ARM 编写 gdbstub,我有一个问题。我正在尝试为我的存根实现观察点。GDB 为不同类型的观察点(读、写、访问)提供了特殊的数据包,但是每次我在某些值上设置观察点时,我都会得到 GDB 实现——单步执行代码并比较每一步的值。它在 GDB 文档中指定,但是为什么需要一个特殊的数据包来编写观察点呢?
显然,GDB 原生实现很慢。可能需要此数据包来重新定义实现。例如,当我将 wp 设置为 addr 而不是 value 时,Z2 数据包真的被发送了。但我不明白 GDB 应该如何理解“S05”(停止数据包)是由于观察点而发送的。
在断点中,决定是在当前bp_address
和程序计数器值之间进行比较。
它如何与观察点一起工作?
debugging - GDB:如何在函数返回后强制不删除观察点?
函数局部变量上的观察点通常在函数返回时被删除,并显示消息«Watchpoint 7 deleted because the program has left the block in»。插图:
gdb 会话示例
我尝试像wa *(mystruct *)&obj
and一样投射它wa *(mystruct *)(void*)&obj
,但无济于事。
我需要它,因为我正在使用的嵌入式 ARM 设备上的 GDB 已损坏:有时它会无缘无故地删除观察点;然后回溯看起来像标有“??”的行 标志,以及有关损坏堆栈的消息。即使应用程序实际上很好。
java - Eclipse Java 条件观察点
Eclipse 支持条件断点,当条件为真时在特定行中断。
它还支持在访问/修改给定变量时立即中断的观察点,而不管导致修改的行。
我将如何创建一个条件观察点,以便它在修改给定变量的任何一行并且条件为真时中断?
例如:在变量 X 上设置一个 MODIFY 观察点,以便它仅在 X 设置为 > 1000 的值时中断
编辑:假设一个字段可以从许多不同的方法中更改,可能在不同的包中。可以想象,可以在这些位置中的每一个位置创建一个条件断点,以便在条件为真时中断。但是,这个变量被触及的位置可能很多,并且放置断点的位置相当低效(从人类的角度来看)。另一种方法是观察点,它会在任何时候修改字段时自动中断,无论它是从代码中的何处修改的。但是,我不知道只有在满足条件时才会中断观察点的方法。
c - 共享内存中的观察点?
我正在调试 PostgreSQL 补丁中的一个问题,其中共享内存中的一个单词似乎被无意覆盖了。
Valgrind 没有任何帮助,因为它无法跟踪多个进程之间共享内存中的交互。
被覆盖的地址相当稳定,但并非完全固定,尽管它总是由每个进程在启动早期初始化的全局结构中的指针标识。
每当任何进程写入感兴趣的地址时,我都试图找到一种方法来获取堆栈跟踪,但事实证明这比我预期的要困难得多。
gdb
观察点没有任何帮助,因为 gdb 无法跟踪fork()
并在子进程上建立相同的观察。由于 PostgreSQL 使用的子进程数量以及手动设置涉及的时间问题,手动使用多个 gdb 进程执行此操作非常麻烦。
perf
用户空间探测器看起来很有希望,但似乎只附加到函数,没有明显的方法来捕获对内存地址的写入。
那么有什么方法可以跨多个进程将每个写入器的堆栈跟踪抓取到给定的共享内存地址?
ios - EXC_BREAKPOINT 代码和子代码的含义是什么?
通常当我设置 lldb 观察点时,当它们被命中时,lldb 会说观察点命中旧值:新值。但是,我在似乎被写入第 3 方库 (libjpeg-turbo) 内部的地址上设置了一个观察点,而不是通常的观察点命中,我看到的是 EXC_BREAKPOINT 代码 = 258,子代码 = 0xADDRESS。
在所有情况下,我都可以看到子代码必须是地址,因为它始终等于地址或接近我设置观察点的地址。谁能证实这一点?
如果我删除观察点并继续前进,lldb 不会因 EXC_BREAKPOINT 而暂停。但是代码是什么意思,我在哪里可以找到一些官方文档?
exc_types.h 没有提供任何详细信息。