【问题标题】:How detect a variable changed without using如何在不使用的情况下检测变量的变化
【发布时间】:2016-06-27 14:04:26
【问题描述】:

我有一个大项目,我意识到有一个变量在没有直接写入任何值的情况下被更改。我的意思是,我认为有一个指针在改变这个值......我想知道是否有任何软件可以检测到这种故障。

我正在使用 Valgrind,但它没有提供足够的信息来修复它。

任何帮助将不胜感激。

【问题讨论】:

  • 可以使用调试模式“数据”调试。您引入一个指向变量的指针,程序在该变量更新时停止。让我知道它是否有效。谢谢。
  • 尝试打印它的地址。
  • 您的代码中是否有自定义内存管理器?还是它的直接 malloc/free?
  • 直接malloc/free。问题是指针很多,而且项目是由另一个人开始的,所以很难找到指向我的指针。
  • the explantion provided here 不起作用吗?

标签: c++ debugging memory embedded-linux


【解决方案1】:

在嵌入式系统中,有几种方法可以在变量发生变化时得到通知:

  1. 轮询——有一些后台代码监控变量和 当变量执行关联函数(通过指针) 变化。
  2. RTOS 机制 -- 将变量与信号量、互斥体或 消息队列。
  3. 中断——也许你的变量是一些中断寄存器 硬件设备,否则您将在硬件设备时中断 寄存器被修改。

对于轮询,您最好的解决方案是分配一个指向内存地址的指针并将指针设置为指向volatile 项。您可能希望使用 sleep 函数调用,以免占用所有处理器时间。

【讨论】:

    【解决方案2】:

    Visual C++ IDE 可以在调试模式下检查变量的值。变量的任何变化都会在调试模式下动态更新。

    【讨论】:

    • 我正在使用 eclipse,我正在编写一个在 linux 中运行的嵌入式系统。
    • Visual C++ IDE 将如何帮助在 Linux 中进行调试??
    • 几年前我尝试在 GDB/GCC 中做类似的事情,但从未找到这样做的方法。 Windows 领先于 Linux 的还有一件事 :-)
    • @osgx 我已经说过在 Visual C++ IDE 中进行调试,因为这个问题对于所使用的操作系统(Windows/Linux/MacOS)并不准确。此外,还提供适用于 Linux 和 Mac OS 的 Visual C++ IDE。请查看link
    • @JulenUranga 请参考我之前的评论在linux中使用visual c++进行调试。或者,您也可以使用 Eclipse IDE 在 Linux 中进行调试。请关注此link
    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2013-06-23
    • 2017-06-12
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多