追踪内存损坏的具体调试技巧/工具?

时间:2011-11-12 15:14:29

标签: c++ debugging memory

我正在编写一个压缩YUV420p视频的简单视频编码器。我注意到,当我使用相同的压缩设置从相同的输入文件重新生成文件时,生成的文件总是略有不同。没有大的变化,通常只有几个位受到“宇宙射线位翻转”效应的影响。

在我的程序中,我没有使用随机值,因此结果输出应该始终相同。我怀疑我的程序在其分配的内存之外执行读/写操作,这可以解释数据的随机性。

除了常规调试实践外,是否有特殊的工具/技巧可以帮助我发现这些恶作剧的原因?

3 个答案:

答案 0 :(得分:3)

如果在Windows操作系统上,您可以尝试AppVerifier

答案 1 :(得分:0)

  • 使用容器的调试变体
  • 使用容器的接口而不是原始内存
  • 即MallocDebug
  • MallocLogging
  • 的valgrind
  • MallocScribble
  • 在某些情况下,您可以使用您期望的结果执行两次操作 - 验证结果是否匹配(请注意,您不应直接比较内存,而是使用接口)。
  • 如果您知道所使用的算法足够好,您可以提供一个输入,您可以分析输出的错误(例如“如果输入是黑框,输出也应该是黑框”)。

不确定您正在开发哪个平台。提到的工具是'nixes和OS X(也是'nix但是......)

答案 2 :(得分:0)

您可以创建一个输出记录,然后创建另一个输出记录。在压缩前者的每个输出位的过程中,您可以与后者的相同位进行比较。我不知道压缩机。但是如果你有几个压缩阶段,你可以为第一个结果记录制作不同阶段的几个记录。压缩第二个结果记录时,您需要将每个阶段的位与第一个输出的对应记录的位进行比较。结果你可以找到一个破坏位的地方。