<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

匯總一些嵌入式打log的一些規則

麥克泰技術 ? 來源:嵌入式大雜燴 ? 2024-01-19 11:07 ? 次閱讀

在我們嵌入式開發中,打印日志是最常用的一種調試手段。合理地打印日志,可以幫助我們快速地分析問題。

本篇文章我們來匯總一些嵌入式打log的一些規則。

1、什么操作下加日志?

(1)錯誤處理

對于不能恢復的嚴重錯誤,日志內容應詳細到足以幫助定位問題,但同時不應該包含敏感信息。比如申請內存失敗時使用錯誤(Error)級別加上日志信息。

(2)一些關鍵性的操作

一些很關鍵地處理,無論是正常情況或者異常情況都要打印日志。比如wifi打開時要有對應的日志信息。

(3)系統的打開、關閉

記錄系統啟動和關閉過程中的關鍵步驟有助于分析系統初始化是否正確,或者系統是否正常關閉。

(4)性能監控

日志可以記錄系統運行的關鍵性能指標,如CPU和內存使用率、IO操作等,以便進行系統性能分析和優化。

(5)關鍵數據

一些關鍵數據需要打印,很多功能上的問題大多直接與數據進行掛鉤。

(6)通信日志

對于需要與外部設備或網絡通信嵌入式系統,記錄通信日志可以幫助分析和調試通信協議或數據交換的問題。

(7)記錄用戶行為

在需要分析用戶如何與嵌入式設備交互的情況下,記錄用戶行為的日志會非常有幫助。

(8)if、switch

分支判斷中,各執行分支需要加上對應的日志信息,可以幫助我們準確地知道程序執行的走向。

(9)程序崩潰時的信息

比如,Linxu下應用進程崩潰時的調用堆棧信息。

#include
#include
#include
#include

voidfunc0(void)
{
printf("Thisisfunc0
");
int*p=NULL;
*p=1234;
}

voidfunc1(void)
{
printf("Thisisfunc1
");
func0();
}

voidfunc2(void)
{
printf("Thisisfunc2
");
func1();
}

voiddump(intsigno)
{
void*array[100];
size_tsize;
char**strings;

size=backtrace(array,100);
strings=backtrace_symbols(array,size);

printf("Obtained%zdstacks.
",size);
for(inti=0;i
c4f0db78-b677-11ee-8b88-92fbcf53809c.png

2、功能模塊標簽

項目中肯定會劃分有多個模塊,可以給各個模塊標記一個模塊標簽字符串,包含在日志條目里。這樣我們就可以在日志文件里通過模塊標簽來篩選某個模塊的日志,提高我們定位問題的效率。

比如:

//app_wifi.c

#defineLOG_TAG"[wifi_module]"
#defineLOG_D(fmt,arg...)LOG_D_TAG(LOG_TAG,fmt,##arg)
LOG_D("hellowifimodule");

輸出:

[wifi_module]hellowifimodule

3、模塊日志開關

設置模塊日志開關,可以方便我們調試、分析問題時,縮小分析范圍。當我們的函數設計有多個功能函數模塊的時候,當某個模塊出現問題時,這個時候我們只是關心此模塊,那么可以先把其他模塊的日志功能關閉掉,只是打開關心模塊的日志。

如:

//module1.c
#include"module1.h"

#ifMODULE1_LOG_SWITCH
#defineLOG_MODULE1(fmt,args...)DBG_PRINTF(fmt,##args)
#else
#defineLOG_MODULE1(fmt,args...)
#endif

//module2.c
#include"module2.h"

#ifMODULE2_LOG_SWITCH
#defineLOG_MODULE2(fmt,args...)DBG_PRINTF(fmt,##args)
#else
#defineLOG_MODULE2(fmt,args...)
#endif

//config.h
#defineMODULE1_LOG_SWITCH0
#defineMODULE2_LOG_SWITCH1

4、時間戳

日志應包含時間戳,可以方便地查看某段代碼的執行時間、確定問題發生的具體時間。時間戳最好能精確到微秒/毫秒。

5、日志級別

使用不同的日志級別可以幫助篩選和控制輸出的信息量。

常見的日志級別包括:

錯誤(Error):程序無法運行或嚴重問題。

警告(Warning):可能的問題,程序可以繼續運行。

信息(Info):程序運行狀態信息。

調試(Debug):詳細的調試信息,包括變量值和程序流程。

詳細(Verbose):非常詳細的信息,用于深入調試。

6、格式統一

為了使日志易于閱讀,所有日志應保持一致的格式。

日志里常包含的固定信息有:

文件名

行號

時間日期/時間戳

函數名

模塊名稱

進程ID

線程ID

可根據需要進行組合。如:

[2024-01-1411:12:30.666][wifi_module][func:wifi_init]

7、過濾控制

使用日志動態過濾控制功能可以動態地調整日志地輸出,但前提是項目使用地日志組件具備這樣的能力。比如EasyLogger(https://github.com/armink/EasyLogger)。

c5022d74-b677-11ee-8b88-92fbcf53809c.png

8、Release/Debug開關

由于日志打印可能占用不少系統資源,應當注意其對性能的影響。在Release版本中,可能需要減少日志輸出或者去掉一些不必要的日志,需要一個開關來進行切換。

9、封裝日志接口

嵌入式中,日志的輸出大多數情況下會輸出到串口終端。但也有一些場景,需要把日志輸出到屏幕、網絡設備、定制化的上位機等場景。需要留出對應接口,方便靈活切換。






審核編輯:劉清

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

    關注

    18

    文章

    983

    瀏覽量

    47050
  • 上位機
    +關注

    關注

    26

    文章

    863

    瀏覽量

    54184
  • linxu
    +關注

    關注

    0

    文章

    7

    瀏覽量

    2510

原文標題:嵌入式中,日志調試法的一些規則!

文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于嵌入式培訓的一些看法

    我們不能忙的為了工作去學習嵌入式,重要的是要自己喜歡?,F在嵌入式很火,一些大學的學生開始往這個方向發展。但是面對層出不窮的培訓學校以及各種課程體系的攻擊。學生們頓時陷入了迷茫之中。各家的培訓機構都
    發表于 02-02 15:08

    新手求教:推薦一些嵌入式的入門視頻

    如題,希望各位大俠推薦一些入門的嵌入式視頻,最好是打基礎的,真心求教
    發表于 05-18 20:23

    求教嵌入式和ARM的一些問題。

    搞定了51單片機,學校的其他專業課程又沒什么興趣,嵌入式系統下學期才有課,本來想深入學習一些別的單片機比如AVR什么的,但是后來想想還是想學嵌入式先。本人對編程還是很有信心的,但是嵌入式
    發表于 11-08 21:20

    本人嵌入式培訓時參考的一些軟件資料

    本帖最后由 eehome 于 2013-1-5 09:51 編輯 本人嵌入式培訓看的一些軟件資料,希望給大家點幫助。。。如果有什么疑問可以給我留言
    發表于 12-01 21:35

    學習嵌入式一些心得!

    了,再學習就感到容易理解。實際上,眾多嵌入式應用,并不定需要操作系統。也可以根據實際項目需要再學習。定不要被一些嵌入式實時操作系統移植培
    發表于 02-02 09:35

    對于嵌入式一些認識

    本來學嵌入式就不簡單,所以大家都會去找一些學習嵌入式的方法或步驟什么的,如果是你去學嵌入式的話,肯定也不會例外,下面可以起來了解下
    發表于 05-25 17:40

    學習嵌入式linux上的一些問題分享

    不知不覺,博客似乎也成為了自己記錄學習道路上的一些迷茫的個小日記??赡芤彩亲约阂咔槠陂g在家呆了4個月的時間,也可能是最近課程壓力比較大,或者是最近和導師聊了下之后的想法,還有最近自己學習嵌入式
    發表于 11-04 06:50

    梳理嵌入式Linux的一些知識

    前言這篇文章簡單我們來起梳理嵌入式Linux的一些知識,方便于一些想跟我樣想要由單片機進階到嵌入式
    發表于 11-04 07:33

    大佬都在看的嵌入式Linux的一些知識

    前言 這篇文章簡單我們來起梳理嵌入式Linux的一些知識,方便于一些想跟我樣想要由單片機進階到嵌入式
    發表于 11-05 08:12

    分享一些嵌入式方面的基礎知識

    同時更關鍵的是為了補齊一些嵌入式方面的基礎知識,做如下筆記,持續記錄:1.嵌入式系統基礎知識(1) 嵌入式系統組成嵌入式系統是:以應用為中心
    發表于 11-08 07:41

    介紹嵌入式系統的一些基礎知識

    本文主要介紹嵌入式系統的一些基礎知識,希望對各位有幫助。嵌入式系統基礎1、嵌入式系統的定義(1)定義:以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應應用系統對功能、可靠性、成本、
    發表于 12-21 07:32

    嵌入式一些日常小技巧分享

    雜記–算法學習日志+關于實驗室部門架構的思考+嵌入式一些日常小技巧分享算法學習日志因為從初中到現在直是學習嵌入式程序的開發和研究,并沒有在面向對象的程序上有很大的研究和進展,在近期發
    發表于 12-21 08:07

    嵌入式系統的一些學習建議分享

    有些學員在學嵌入式的時候,直在邊緣打轉,本來嵌入式就是有難度的,如果你再沒有基礎的話,那么學習起來就真的費勁了,還好下面小編準備了嵌入式系統的一些
    發表于 12-22 08:10

    嵌入式開發的一些知識點匯總

    這個專欄我們講下嵌入式開發的一些知識,首先給大家講下單片機常見的類外設,總線,希望不太清楚的朋友看了文章對嵌入式開發,用到的總線有個了解。目錄如下1.UART2. IIC3. SPI
    發表于 12-24 06:40

    起梳理嵌入式Linux的一些知識

    前言這篇文章簡單我們來起梳理嵌入式Linux的一些知識,方便于一些想跟我樣想要由單片機進階到嵌入式
    發表于 01-05 07:18
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>