繁体   English   中英

在 FreeBSD/Linux 中修改 memory 位置的值时触发中断

[英]Trigger an interrupt when the value of a memory location is modified in FreeBSD/Linux

当使用 C 程序在 FreeBSD 或 Linux 环境中修改变量的值或 memory 位置时,是否可以生成中断?

在 C 应用程序中,有一个动态分配的数组正在从多个位置使用/修改。 该应用程序非常庞大且复杂,很难跟踪使用或修改数组的所有位置。 问题是在某些条件/流中,array[2] 元素变为 0,这在此应用程序中是不期望的。 我无法使用 gdb 运行应用程序来调试此问题(由于某些限制)。 调试此问题的唯一方法是修改源代码并运行发生问题的二进制文件。

是否可以在修改 arra[2] 元素时生成中断并打印回溯以了解代码库的哪一部分已对其进行了修改?

谢谢!!!

你想要一个数据断点,也叫观察点; GDB提供以下命令:

  • watch写入
  • rwatch用于读取
  • 两者awatch

您也可以向 GDB 询问特定条件,因此以下表达式(或类似表达式)应该有效:

watch array[2] if array[2] == 0

必须在变量的 scope 中运行表达式,最简单的方法是在分配后的行中设置一个断点,然后在断点触发后设置观察点并恢复执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM