日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内存检测工具sanitize

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内存检测工具sanitize 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前用過valgrind這個內存泄露檢查工具,這個工具相對簡單,對于一些復雜的內存泄露可能無法解析出來而且有一個問題就是只有檢測的進程退出后才會輸出內存泄露信息。

今天介紹的工具sanitize可以在檢測到內存泄露第一時間立刻終止進程,并且它可以深入檢測(隨應用進程一起編譯)。下面舉例說明:

#include <stdlib.h> #include <unistd.h> extern void __lsan_do_leak_check(); void FooBar() {malloc(7); }int main() {FooBar();while(1) {//死循環__lsan_do_leak_check();sleep(10);}return 0; }

我這里的編譯方式如下:

/opt/gcc-7.3.0/bin/gcc -Wl,-rpath=/opt/gcc-7.3.0/lib64 -fsanitize=leak -llsan ?a.c

編譯參數必須指定 -fsanitize=leak,如果檢測非法內存則指定-fsanitize=address。編譯完成后運行:

[root@localhost ~]# ./a.out ================================================================= ==11456==ERROR: LeakSanitizer: detected memory leaksDirect leak of 7 byte(s) in 1 object(s) allocated from:#0 0x7f93d7ee8136 in __interceptor_malloc ../../../../libsanitizer/lsan/lsan_interceptors.cc:53#1 0x400674 in FooBar (/root/a.out+0x400674)#2 0x400685 in main (/root/a.out+0x400685)#3 0x7f93d7b303d4 in __libc_start_main (/lib64/libc.so.6+0x223d4)SUMMARY: LeakSanitizer: 7 byte(s) leaked in 1 allocation(s). [root@localhost ~]#

如上圖所示,能夠將堆棧信息打印出來(有些時候打印堆棧信息不全)。如果我們在希望在進程終止時打印內存泄露,那么我們在代碼中可以不調用__lsan_do_leak_check();方法。

sanitize還提供了很多參數,可參考https://github.com/google/sanitizers/wiki

總結

以上是生活随笔為你收集整理的内存检测工具sanitize的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。