【问题标题】:A Strange Problem in Heap Memory!堆内存中的一个奇怪问题!
【发布时间】:2010-05-04 09:28:38
【问题描述】:

我发现一个多线程应用程序的一个线程在 VxWorks 中崩溃了。我没有调试信息。经过深入分析,我发现崩溃是由于更改了全局内存地址值而导致的。

这个全局内存地址(它是一个函数的地址。我正在使用一个函数指针)被存储在堆中的一个特定地址位置。发现这个全局内存地址本身是减2的,导致访问不正确,加载指令出错。

这是随机发生的。但是,我真的很惊讶是什么导致地址值减少了 2。

任何方向的猜测、想法或指示都可能会有所帮助。

【问题讨论】:

    标签: c memory heap-memory corruption vxworks


    【解决方案1】:

    一些 CPU 有一个硬件断点,可以让您在写入内存位置时中断。将 CPU 设置为在读取或写入该位置时中断,并在碰巧看到哪个函数在执行此操作时查看堆栈。

    【讨论】:

    • 非常感谢您的回答。我们正在探索这一点。但是,还有其他方法可以找到吗?
    • 您不需要其他方式。如果内存损坏的地址重复良好,则该硬件断点非常有效。
    • 既然发生是随机的,我不知道什么时候会再次重复。所以,除此之外,我还想要其他方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多