跟踪内存损坏的特定调试技巧/工具
Specific debugging tips/tools to track down memory corruption?
我正在编写一个简单的视频编码器,用于压缩YUV420p视频。我注意到,当我用相同的压缩设置从相同的输入文件重新生成结果文件时,结果文件看起来总是略有不同。没有大的变化,通常只有几个比特受到"宇宙射线比特翻转"效应的影响。
在我的程序中,我没有使用随机值,所以结果输出应该总是相同的。我怀疑我的程序在它分配的内存之外执行读/写操作,这就解释了数据的随机性。
除了常规的调试实践,是否有特殊的工具/技巧来帮助我检测这些恶作剧的原因?
如果在Windows操作系统,您可以尝试AppVerifier
- 使用容器的调试变量
- 使用容器的接口而不是原始内存
- MallocDebug
- MallocLogging
- valgrind
- MallocScribble
- 在某些情况下,您可以执行两次操作,您应该期望得到相同的结果-验证结果匹配(注意,您不应该直接比较内存,而是使用接口)。
- 如果你足够了解所使用的算法,你可以提供一个输入,你可以分析输出的错误(例如:"如果输入是黑帧,输出也应该是黑帧")。
不确定您在哪个平台上开发。上面提到的工具适用于'nix和OS X(也是'nix但是…)
您可以创建一个输出记录,然后创建另一个。在压缩过程中,可以将前者的每个输出位与后者的相同位进行比较。我不知道压缩机。但是,如果您有多个压缩阶段,您可以为第一个结果记录创建多个不同阶段的记录。在压缩第二个结果记录时,需要将每个阶段的位与第一个输出的对应记录的位进行比较。因此,您可以找到损坏比特的特定位置。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 提升堆元素句柄比较和 MSVC 迭代器调试工具
- 为lldb启用调试工具
- Visual studio调试工具提示-隐藏变量
- 如何为Visual Studio 2012调试器编写自定义本机可视化工具DLL
- 在VS C++ 6.0中,哪些调试工具适合查找内存泄漏的位置
- 如何编写一个非常简单的Visual Studio调试器可视化工具
- 是否有类似Valgrind Memcheck的工具,用于在没有错误后进行调试使用
- 没有调试工具的调试技术
- 调试工具跟踪程序中所有STL容器的大小
- C++:如何调试使用 Eclipse 中的"Microsoft Visual C++"工具链编译的C++应用程序?
- 简单的HowTo在调试器中启动OSX上的C++命令行工具
- 是否有调试机制、解决方法、包装器或工具来检测shared_ptr周期
- 非托管C++的GDI对象的调试器可视化工具
- 跟踪内存损坏的特定调试技巧/工具
- 在Visual Studio中调试c++程序缓冲区溢出的工具
- 用于调试Borland和Visual Studio应用程序的工具
- DWARF调试信息文件的diff工具
- "MATLAB style"计算机视觉\图像处理可视化\调试工具
- Solaris 10 - 在 32 位 GDB 工具上调试 64 位C++应用程序