鱼鳞病

首页 » 常识 » 问答 » 启用内存泄漏越界检查工具
TUhjnbcbe - 2021/7/4 6:47:00
中科白癜风医院爱心公益 http://m.39.net/pf/a_6169140.html

只需要添加几行编译选项即可启用内存泄漏/越界检查工具。

注意:目前仅支持GCC4.8版本以上编译工具,建议使用GCC4.9版本以上。

0x01编译选项开启内存泄露检查功能:-fsanitize=leak开启地址越界检查功能:-fsanitize=address开启越界详细错误信息:-fno-omit-frame-pointer0x02以Qt工程为例子.pro项目文件:

SOURCES+=main.cpp#-fsanitize=leak意思为开启内存泄露检查QMAKE_CXXFLAGS+="-fsanitize=leak"QMAKE_CFLAGS+="-fsanitize=leak"QMAKE_LFLAGS+="-fsanitize=leak"#-fsanitize=address意思为开启内存越界检查#-fno-omit-frame-pointer意思为显示更详细的信息QMAKE_CXXFLAGS+="-fsanitize=address-fno-omit-frame-pointer"QMAKE_CFLAGS+="-fsanitize=address-fno-omit-frame-pointer"QMAKE_LFLAGS+="-fsanitize=address"main.cpp文件:

#includestdlib.hintmain(intargc,char*argv[]){/*内存泄露*/malloc(10);/*行6*//*内存越界*/inta[10]={0};intb=a[11];/*行10*/return-1;}运行输出(省略部分编译输出):

/*发现一处内存越界,位于main.cpp行10*/====ERROR:AddressSanitizer:stack-buffer-overflowonaddress0x7ffcedd5c#00xinmain../Detector/main.cpp:10/*发现一处内存泄漏位于,main.cpp行6*/Directleakof10byte(s)in1object(s)allocatedfrom:#00x7ff56bbbainmalloc(/usr/lib/x86_64-linux-gnu/libasan.so.2+0x98)#10xeinmain../Detector/main.cpp:60x03命令行例子

gcc-fsanitize=leak-fsanitize=address-fno-omit-frame-pointer-llsanmain.cpp0x04关于更多

上述开启的编译选项工具来源于sanitizers工具集:

1
查看完整版本: 启用内存泄漏越界检查工具