来自Linux/gcc/clang我发现自己在Windows/Visual Studio上的工作越来越多.
我真正缺少的是地址清理器(边界检查,泄漏,免费后使用,......).我做了一些研究,并尝试了一些事情,但没有找到完整(功能明智)和可靠的替代品.我以Dr.Memory为例,但了解到它对基于Qt的程序不起作用(至少在Windows 10上不行).
那么如何在Windows/MSVC上获得类似地址清理程序的功能呢?
我用gcc/mingw在eclipse cdt(c ++)中安装了glew,glfw和glm,这些都是静态的.一切正常,但我不喜欢eclipse输出控制台中的警告:
警告:在def文件末尾损坏.drectve
我如何修复和隐藏此警告?这是什么意思 ?
我注意到的是,只有当我调用'glewInit'函数时才会出现此警告.
我正在使用mingw-w64(gcc 7.3.0),并且在使用以下命令编译任何C ++程序时:
g++ file.cpp -fsanitize=undefined
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
... mingw32 / bin / ld.exe:找不到-lubsan
但是,如果删除该-fsanitize=undefined标志,则能够成功编译并运行程序。经过一些研究,我发现这意味着缺少库ubsan(未定义行为消毒剂),但是我找不到关于库的任何信息。我该如何解决?
extern void myprint(unsigned char *);
static inline void
myfunc(unsigned char *buf)
{
for (unsigned int i = 0; i < 20; i++) {
buf[i] = i;
}
}
int
main(void)
{
unsigned char buf[10];
myfunc(buf);
myprint(buf);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
$ gcc.exe -O2 -pedantic -Wextra -Wall -Wstringop-overflow -Wuninitialized -Wunused -Warray-bounds=2 -Wformat-overflow -Wstringop-overread -g -c C:\temp\cb\main.c -o build\mingw\obj\main.o
$ gcc.exe -o build\mingw\test.exe build\mingw\obj\main.o build\mingw\obj\mod.o -O2
Run Code Online (Sandbox Code Playgroud)
$ gcc --version
gcc (i686-posix-sjlj-rev1, Built by MinGW-W64 project) 11.2.0
Copyright (C) 2021 Free Software Foundation, Inc. …Run Code Online (Sandbox Code Playgroud) c++ ×2
gcc ×2
c ×1
compilation ×1
eclipse-cdt ×1
g++ ×1
gcc-warning ×1
glew ×1
glfw ×1
mingw ×1
mingw-w64 ×1
msys ×1
msys2 ×1
opengl ×1
qt ×1