【问题标题】:Finding segfault without having testing data在没有测试数据的情况下查找段错误
【发布时间】:2013-03-20 07:49:43
【问题描述】:

这似乎是一个愚蠢的问题,但我需要知道,是否有任何工具可以在没有测试数据的情况下在我的代码中查找可能的段错误点,这会导致段错误。特别是一些用于测试正确使用指向数组中项的指针的工具

【问题讨论】:

  • Static code analysis 可能有助于发现一些问题。
  • 我在构建过程中运行 cppcheck
  • 如果你害怕你的代码的一部分,你可以为此编写特定的单元测试。我倾向于为我的所有代码编写单元测试(c:,我的恐惧减少了。
  • cppcheck 也找不到。但是我在 bash 中做了一个模糊测试,终于找到了这个 bug。我重新分配了数据数组,但我忘记更改指向这些数据的排序指针。它仅对需要重新分配的大数据产生段错误。愚蠢的错误:D

标签: c++ debugging testing segmentation-fault


【解决方案1】:

一般有几个选项:

  • 代码审查(不是计算机程序意义上的工具,但仍然是一种工具)
  • 静态代码分析器
  • 模糊测试

【讨论】:

  • 太棒了,非常感谢您引导我朝这些方向发展。对最后两个工具一无所知。应该解决我的问题:)
  • 请注意,静态代码分析器可能无法找到所有缺陷,甚至会产生误报,并且模糊测试的质量很大程度上取决于代码和测试。你应该考虑在代码覆盖率测试的可执行文件上运行模糊测试,这样你就可以看到代码的未执行点并编写缺失的测试。
【解决方案2】:

一个很好的选择是ValgrindMemCheck。即使数据不会立即导致分段错误,也可能存在无效的内存访问(悬空指针、从未初始化的变量读取、缓冲区溢出、堆损坏……)。这将在它们发生时指出它们,而不是等待可能仅在离问题本身很远的地方发生的分段错误,从而允许您修复它们。

【讨论】:

  • Memcheck 找不到错误,但这可能只是巧合。感谢您的提示:)
猜你喜欢
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
  • 2011-11-08
  • 2014-12-26
相关资源
最近更新 更多