相关疑难解决方法(0)

有一个很好的Valgrind替代Windows吗?

当我发现它仅适用于Linux时,我正在研究Valgrind以帮助改进我的C编码/调试 - 我没有其他需要或兴趣将我的操作系统转移到Linux所以我想知道是否有一个同样好的Windows程序.

c windows debugging valgrind memory-leaks

210
推荐指数
12
解决办法
30万
查看次数

gcc-4.9未定义的行为消毒剂

gcc-4.9中改变了:

UndefinedBehaviorSanitizer(ubsan)是一个快速未定义的行为检测器,已添加并可通过-fsanitize = undefined启用.将检测各种计算以在运行时检测未定义的行为.UndefinedBehaviorSanitizer目前可用于C和C++语言.

我看了这个问题(一个检测未定义行为的C++实现?)但它似乎已经过时了.

这个链接(http://gcc.gnu.org/ml/gcc-patches/2013-06/msg00264.html)上有一些信息,但已有几个月了.

这是尝试将未定义的行为消毒剂添加到GCC.请注意,它是非常alpha版本; 到目前为止,它没有做那么多,目前它应该处理除零情况,INT_MIN/-1和各种移位情况(移位负值,当第二个操作数> = = TYPE_PRECISION(first_operand)时移位)这样的.(在整数类型上,到目前为止.)

从我读过它被移植到gccLLVM.

我试过它,(5 / 0)唯一的区别似乎是这个输出:

main.cpp:5:19: runtime error: division by zero
Run Code Online (Sandbox Code Playgroud)

有没有人有关于它的更多信息或它有什么功能?

c++ gcc undefined-behavior gcc4.9

34
推荐指数
1
解决办法
1万
查看次数

我怎么应该在铿锵声中使用消毒杀菌剂?

我很抱歉,如果这是一个超级简单的概念,但我发现很难获得正确的心态,以便正确使用由提供的消毒剂clang.

float foo(float f) { return (f / 0); }
Run Code Online (Sandbox Code Playgroud)

我编译这个小片段

clang++ -fsanitize=float-divide-by-zero -std=c++11 -stdlib=libc++ -c source.cpp -o osan
Run Code Online (Sandbox Code Playgroud)

而且我还在不使用消毒剂的情况下编译了我的对象的"正常"版本

clang++ -std=c++11 -stdlib=libc++ -c source.cpp -o onorm
Run Code Online (Sandbox Code Playgroud)

我期待一些详细的输出,或者来自控制台的一些错误,但是在检查文件时nm我只发现了1个差异

nm o* --demangle

onorm:
0000000000000000 T foo(float)

osan:
                 U __ubsan_handle_divrem_overflow
0000000000000000 T foo(float)
Run Code Online (Sandbox Code Playgroud)

所以在清理版本中有一个未定义的符号,其名称类似于我在编译时使用的清洁剂; 但是一切都是"沉默的",而且从铿锵的前端根本没有输出.

我应该如何使用消毒剂以及什么是正确的工作流程?那个未定义的符号有什么意义?

c++ llvm clang sanitizer

15
推荐指数
2
解决办法
7171
查看次数