哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【RT-Thread學習筆記】用memwatch排除內(nèi)存泄露

嵌入式物聯(lián)網(wǎng)開發(fā) ? 來源:嵌入式物聯(lián)網(wǎng)開發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開發(fā) ? 2022-07-30 14:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

? 本文將給大家介紹,如何使用一個小的開源組件【memwatch】排查有可能出現(xiàn)【內(nèi)存泄漏】的代碼。

先上一段測試代碼,里面是包括一些內(nèi)存操作錯誤的代碼:

//main.c

#include 
#include 
#include 
#include 

#include "memwatch.h" //包含memwatch提供的頭文件

static void signal_handler(int sign_no)
{
    printf("Capture signal no: %d\n", sign_no); 
	
	exit(-1);
}

int memory_leak_test(void)
{
	char *p, *p1, *p2=NULL;
	
	p = malloc(100); //申請空間
	if (p) {
		strcpy(p, "123456");
	}
	
	p1 = malloc(5); //申請空間
	if (p1) {
		strcpy(p1, "123456");
	}
	
	//free(p); //使用完故意不釋放
	//free(p1); //使用完故意不釋放
	
	*p2 = '5'; //訪問空指針,導致segment default (core dump),memwatch并不能堅持出來
	
	return 0;
}

int main(int arc, const char *argv[])
{
	signal(SIGSEGV, signal_handler); 
	
	printf("This is a sample for memwatch to detect memory leak !!!\n");
	
	memory_leak_test();
	
	return 0;
}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

然后將memwatch的源碼memwatch.c和memwatch.h放到main.c的目錄下,一同參與編譯,如下圖:

通過makefile或其他編譯方式,將上述文件編譯成可執(zhí)行文件,再運行,觀察運行結(jié)果,如下:

從圖中我們可以知道,memwatch檢測出了main.c中內(nèi)存操作錯誤的地方。另外,除運行輸出錯誤信息外,還會生成一個memwatch.log文件,從中可以詳細地知道內(nèi)存錯誤的類型和具體位置。如下圖:

//memwatch.log

============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============

Started at Thu Mar  7 09:05:35 2019

Modes: __STDC__ 64-bit mwDWORD==(unsigned int)
mwROUNDALLOC==8 sizeof(mwData)==56 mwDataSize==56


Stopped at Thu Mar  7 09:05:35 2019

unfreed: <2> src/main.c(25), 5 bytes at 0xe667e0 [overflowed]  	{31 32 33 34 35 .. .. .. .. .. .. .. .. .. .. .. 12345}
unfreed: <1> src/main.c(20), 100 bytes at 0xe66720  	{31 32 33 34 35 36 00 FE FE FE FE FE FE FE FE FE 123456..........}

Memory usage statistics (global):
 N)umber of allocations made: 2
 L)argest memory usage      : 105
 T)otal of all alloc() calls: 105
 U)nfreed bytes totals      : 105
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

這樣我們就可以很清晰地根據(jù)反饋問題點修改對應的內(nèi)存操作bug了,是不是很方便實用呢?

當然,這個范例僅僅是做了比較簡單的示范,在實際項目工程中,可能會遇到更多更隱蔽的內(nèi)存操作問題,靈活運用memwatch排查內(nèi)存問題,定會事半功倍。

最后附上,整個測試工程的文件,包括源碼和makefile,以供參考,如有發(fā)現(xiàn)問題,可在留言區(qū)評論,我會及時跟進回復。謝謝。

demo工程下載鏈接:memwatch_for_memory_leak_detect.tar.gz

?審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3229

    瀏覽量

    76492
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4975

    瀏覽量

    74339
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1634

    瀏覽量

    45171
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    RT-Thread學習筆記】使用scons命令生成靜態(tài)庫

    RT-Thread學習筆記】如何使用scons 命令中buildlib的生成靜態(tài)庫?
    的頭像 發(fā)表于 07-27 09:13 ?8514次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】使用scons命令生成靜態(tài)庫

    RT-Thread Nano入門學習筆記

    RT-Thread Nano入門學習筆記
    發(fā)表于 11-26 12:36 ?20次下載
    <b class='flag-5'>RT-Thread</b> Nano入門<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    RT-Thread 應用筆記 - RTC Alarm 組件的使用

    RT-Thread 應用筆記 - 不正確使用LOG也會引發(fā)hard faultRT-Thread 應用筆記 - RTC Alarm 組件的使用RT-
    發(fā)表于 01-25 18:18 ?10次下載
    <b class='flag-5'>RT-Thread</b> 應用<b class='flag-5'>筆記</b> - RTC Alarm 組件的使用

    RT-Thread 內(nèi)核學習筆記 - 理解defunct僵尸線程

    RT-Thread 內(nèi)核學習筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學習筆記
    發(fā)表于 01-25 18:19 ?9次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 理解defunct僵尸線程

    RT-Thread 內(nèi)核學習筆記 - 設(shè)備模型rt_device的理解

    RT-Thread 內(nèi)核學習筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學習筆記
    發(fā)表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 設(shè)備模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 內(nèi)核學習筆記 - 內(nèi)核對象鏈表結(jié)構(gòu)深入理解

    RT-Thread 內(nèi)核學習筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學習筆記
    發(fā)表于 01-25 18:23 ?6次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內(nèi)核對象鏈表結(jié)構(gòu)深入理解

    RT-Thread 內(nèi)核學習筆記 - 內(nèi)核對象初始化鏈表組織方式

    RT-Thread 內(nèi)核學習筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學習筆記
    發(fā)表于 01-25 18:24 ?3次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內(nèi)核對象初始化鏈表組織方式

    RT-Thread 內(nèi)核學習筆記 - 內(nèi)核對象操作API

    RT-Thread 內(nèi)核學習筆記 - 內(nèi)核對象rt_objectRT-Thread 內(nèi)核學習筆記
    發(fā)表于 01-25 18:26 ?7次下載
    <b class='flag-5'>RT-Thread</b> 內(nèi)核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內(nèi)核對象操作API

    RT-Thread學習筆記分享

    我是從2020年11月初開始學習RT-Thread實時操作系統(tǒng)的,在學習RT-Thread之前,我接觸過uCOS和FreeRTOS,但這兩個在單片機上應用的實時操作系統(tǒng),我都沒有仔細并
    的頭像 發(fā)表于 01-27 18:52 ?3563次閱讀

    RT-Thread學習筆記 RT-Thread的架構(gòu)概述

    RT-Thread 簡介 作為一名 RTOS 的初學者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發(fā)現(xiàn) RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發(fā)表于 07-09 11:27 ?6174次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b> <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    RT-Thread學習筆記】Makefile的FORCE

    RT-Thread學習筆記】十分鐘學會Makefile的FORCE
    的頭像 發(fā)表于 07-30 13:55 ?3973次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】Makefile的FORCE

    RT-Thread學習筆記】如何抓取終端的網(wǎng)絡(luò)報文

    RT-Thread學習筆記】如何抓取終端的網(wǎng)絡(luò)報文?
    的頭像 發(fā)表于 07-30 13:57 ?4277次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】如何抓取終端的網(wǎng)絡(luò)報文

    RT-Thread學習筆記】GCC鏈接報錯的排除過程分享

    RT-Thread學習筆記】GCC鏈接報錯的排除過程分享,一個意想不到的問題。
    的頭像 發(fā)表于 07-30 15:08 ?1905次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】GCC鏈接報錯的<b class='flag-5'>排除</b>過程分享

    RT-Thread文檔_內(nèi)存管理

    RT-Thread文檔_內(nèi)存管理
    發(fā)表于 02-22 18:30 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>內(nèi)存</b>管理

    基于RT-Thread Studio學習

    前期準備:從官網(wǎng)下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發(fā)表于 05-15 11:00 ?6599次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>學習</b>
    江山市| 资中县| 黎平县| 财经| 景东| 榆中县| 剑阁县| 泰安市| 峡江县| 德清县| 涞源县| 汉阴县| 遵义市| 封开县| 绥滨县| 涞水县| 芦山县| 浮梁县| 宜兰市| 衡东县| 屯门区| 恩平市| 翼城县| 梅州市| 东乡| 内黄县| 伊金霍洛旗| 通许县| 和林格尔县| 宜君县| 肇东市| 青神县| 临城县| 张家界市| 娄烦县| 郑州市| 北流市| 米脂县| 武安市| 句容市| 金乡县|