內(nèi)存泄漏,我們經(jīng)常會(huì)遇到,如何檢測(cè)內(nèi)存泄漏,除了我們之前講過的 valgrind,還可以使用 gcc 自帶的工具 sanitizer。
從 gcc 4.8 開始,sanitizer 就被加入到 gcc 中,使用起來非常方便,可以檢測(cè)內(nèi)存泄漏、內(nèi)存越界、野指針等等。
下面來簡(jiǎn)單演示下怎么使用。
void leak_memory() { char *ptr = (char *)malloc(128); }
比如這段代碼,一眼看出內(nèi)存泄漏。
# gcc test.c -o test -g -fsanitize=address
編譯的時(shí)候加上 -g 選項(xiàng),方便后續(xù)調(diào)試,再加上 -fsanitize=address,得到二進(jìn)制文件。
root@Turbo:~# ./test ================================================================= ==374040==ERROR: LeakSanitizer: detected memory leaks Direct leak of 128 byte(s) in 1 object(s) allocated from: #0 0x7d41794fd9c7 in malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69 #1 0x62d90d0dc25e in leak_memory /root/test.c:5 #2 0x62d90d0dc4e7 in main /root/test.c:43 #3 0x7d417902a1c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 #4 0x7d417902a28a in __libc_start_main_impl ../csu/libc-start.c:360 #5 0x62d90d0dc184 in _start (/root/test+0x1184) (BuildId: a2e83d98f01d2da94cd327af18f596c19fc367bb) SUMMARY: AddressSanitizer: 128 byte(s) leaked in 1 allocation(s). root@Turbo:~#
運(yùn)行程序,會(huì)提示一大堆錯(cuò)誤。雖然全是英文,但是閱讀起來也沒什么難度,只要你有英語三級(jí)的水平,應(yīng)該能發(fā)現(xiàn),內(nèi)存泄漏了。
再來個(gè)代碼,棧內(nèi)存越界訪問。
void stack_overflow() { int array[5] = {0}; array[5] = 1; }
同樣的方法,編譯運(yùn)行,提示棧內(nèi)存溢出。
至于其他的內(nèi)存問題,釋放不合法的內(nèi)存、內(nèi)存被釋放了又繼續(xù)使用、兩次釋放同一塊內(nèi)存,這些問題統(tǒng)統(tǒng)可以檢查。
非常實(shí)用的工具,調(diào)試代碼的時(shí)候,可以幫我們節(jié)省很多時(shí)間。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3115瀏覽量
75108 -
調(diào)試工具
+關(guān)注
關(guān)注
1文章
52瀏覽量
12797 -
內(nèi)存泄漏
+關(guān)注
關(guān)注
0文章
40瀏覽量
9375
原文標(biāo)題:內(nèi)存泄漏調(diào)試工具Sanitizer
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
煤氣泄漏檢測(cè)系統(tǒng)!畢業(yè)設(shè)計(jì)
如何去解決電信設(shè)備內(nèi)的泄漏檢測(cè)?
寫了一個(gè)內(nèi)存泄漏檢查工具
使用開源工具Address Sanitize致力于Go工具鏈的優(yōu)化和特性的支持
泄漏檢測(cè)儀校正與調(diào)整
泄漏檢測(cè)技術(shù)
泄漏檢測(cè)及定位原理

騰訊內(nèi)部內(nèi)存泄漏分析工具簡(jiǎn)析

氨氣泄漏的危害_氨氣泄漏檢測(cè)儀怎么使用_氨氣泄漏檢測(cè)儀的使用方法
真空泄漏檢測(cè)儀的重要性和應(yīng)用
基于C++代碼實(shí)現(xiàn)內(nèi)存泄漏檢測(cè)工具

評(píng)論