色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

【RT-Thread學習筆記】用memwatch排除內存泄露

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-07-30 14:01 ? 次閱讀

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

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

//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或其他編譯方式,將上述文件編譯成可執行文件,再運行,觀察運行結果,如下:

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

//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

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

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

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

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

?審核編輯:湯梓紅

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

    關注

    8

    文章

    3019

    瀏覽量

    74005
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68525
  • RT-Thread
    +關注

    關注

    31

    文章

    1285

    瀏覽量

    40085
收藏 人收藏

    評論

    相關推薦

    RT-Thread學習筆記】使用scons命令生成靜態庫

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

    RT-Thread學習筆記】RISC-V匯編基礎三大塊知識

    RT-Thread學習筆記】RISC-V匯編基礎的三大塊知識
    的頭像 發表于 07-30 11:01 ?2752次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】RISC-V匯編基礎三大塊知識

    RT-Thread Nano入門學習筆記

    RT-Thread Nano入門學習筆記
    發表于 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也會引發hard faultRT-Thread 應用筆記 - RTC Alarm 組件的使用RT-
    發表于 01-25 18:18 ?10次下載
    <b class='flag-5'>RT-Thread</b> 應用<b class='flag-5'>筆記</b> - RTC Alarm 組件的使用

    RT-Thread 內核學習筆記 - 理解defunct僵尸線程

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

    RT-Thread 內核學習筆記 - 設備模型rt_device的理解

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

    RT-Thread 內核學習筆記 - 內核對象鏈表結構深入理解

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:23 ?6次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象鏈表結構深入理解

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

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

    RT-Thread 內核學習筆記 - 內核對象操作API

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

    RT-Thread學習筆記 RT-Thread的架構概述

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

    RT-Thread學習筆記】Makefile的FORCE

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

    RT-Thread學習筆記】如何抓取終端的網絡報文

    RT-Thread學習筆記】如何抓取終端的網絡報文?
    的頭像 發表于 07-30 13:57 ?2810次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】如何抓取終端的網絡報文

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

    RT-Thread學習筆記】GCC鏈接報錯的排除過程分享,一個意想不到的問題。
    的頭像 發表于 07-30 15:08 ?1103次閱讀
    【<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文檔_內存管理

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

    基于RT-Thread Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?3932次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>學習</b>
    主站蜘蛛池模板: 国产欧美另类久久久品| 蜜桃狠狠色伊人亚洲综合网站| 内射白嫩少妇超碰| 亚洲欧美成人| 二级片免费看| 秘密教学26我们在做一次吧免费| 香蕉久久日日躁夜夜嗓| X8X8拨牐拨牐X8免费视频8午夜| 久久精品国产首叶| 新金梅瓶玉蒲团性奴3| www.av日韩| 伦理片在线线手机版韩国免费观看 | 快播成电影人网址| 亚洲国产精品久久精品成人网站| 爱啪国产精品视频在线| 老师系列高H文| 亚洲日本一区二区三区在线不卡| 国产AV精品久久久毛片| 年轻的搜子8中字在线观看| 伊人无码高清| 国内精品偷拍在线观看| 台湾佬休闲中性娱乐网| 被窝国产理论一二三影院| 嫩草www视频在线观看高清| 有码 亚洲 制服 国产 在线| 国内精品久久久久久西瓜色吧| 手机在线看片欧美亚洲| 超碰人人澡人人胔| 欧美极品尿交| 97人妻中文字幕免费视频| 久久婷婷久久一区二区三区| 亚洲日韩国产精品乱-久| 国产一区二区三区影院| 午夜伦伦电影理论片大片| 国产成人无码AV麻豆| 日日日夜夜在线视频| 成人免费精品视频| 日本性hd| 丰满的女友1在线观看| 乳欲性高清在线| 国产69精品久久久久乱码免费|