C++中的大量操作会导致未定义的行为,其中规范完全静音程序的行为应该是什么,并允许任何事情发生.因此,有各种各样的情况,人们有代码在调试但不是发布模式编译,或者直到看似无关的更改,或者在一台机器而不是另一台机器上工作,等等.
我的问题是是否有一个实用程序查看C++代码的执行并标记程序调用未定义行为的所有实例.虽然我们有很好的工具,比如valgrind和检查过的STL实现,但这些并不像我想的那么强 - 例如,如果你丢弃了你仍然分配的内存,那么valgrind会有误报,并且检查了STL实现不会通过基类指针捕获删除.
这个工具存在吗?或者让它躺在身边甚至是有用的?
编辑:我知道一般来说静态检查C++程序是否可能执行具有未定义行为的东西是不可判定的.但是,可以确定C++ 的特定执行是否产生了未定义的行为.实现此目的的一种方法是创建一个C++解释器,根据规范中列出的定义逐步执行代码,在每个点确定代码是否具有未定义的行为.这不会检测特定程序执行中未发生的未定义行为,但会发现任何实际在程序中显示的未定义行为.这与图灵识别如何确定TM是否接受某些输入有关,即使它通常仍然是不可判定的.
谢谢!