gpt4 book ai didi

c++ - Valgrind 能捕捉到各种未定义的行为吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:13 25 4
gpt4 key购买 nike

换句话说,如果我的程序在没有任何 Valgrind 错误消息的情况下运行,我能确定我的程序没有未定义行为吗?

最佳答案

这里有一个根本性的错误。

Valgrind 不是某种理解 C++ 语法语义的静态分析工具,因此知道您何时按照 C++ 标准 的规定调用未定义的行为

Valgrind 是一种工具,但是当您在内存中执行因程序的未定义行为 而导致的操作时,它会提醒您。例如,它会检测您何时访问未分配或已释放的内存,它会检测您何时使用未初始化(或部分未初始化)的值/缓冲区进行系统调用等...

打个医学类比,Valgrind 检测未定义行为症状。没有症状并不意味着没有未定义的行为

此外,因为 Valgrind 只检查运行的代码,它会留下一些未检查的“代码”。

摆脱未定义的行为是极其复杂的。如果你的程序是非平凡的,它很可能等同于解决停机问题。但是,这不应妨碍您采取预防措施:

  • 打开编译器警告:-Wall -Werror 是给定的,-Wextra 非常适合(另外)新代码库(Elementary )
  • 使用静态分析工具(其中几个,因为它们不会报告相同的问题)、Clang Static Analyzer、Purify 等。(良好实践)
  • 广泛的测试套件上运行 Valgrind(您可以使用 gcov 来检查覆盖率)(良好实践)
  • 阅读几个编码标准,并思考他们的建议(不要随意应用它们),Sutter 是第一位的,高质量的 CPP 或 MISRA 更加严格和广泛。一些自动代码审查工具可以检查这样一组规则。 (很好,在个人层面上很有收获)

完成所有这些后,您可能已经发现了程序中的大部分 技术 错误。不幸的是,有些可能仍然潜伏着。有一天,随着优化选项的更改、重构或其他任何原因,它们可能会暴露出来……为了获得更强的保证,您将需要另一种语言。

关于c++ - Valgrind 能捕捉到各种未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6996871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com