嵌入式除錯方法:
1.模擬器。比如qtopia core可以用奇趣提供的frame buffer模擬工具qvfb,arm硬體模擬可以用skyeye開源專案。
2.遠端除錯。偵錯程式還在pc上,偵錯程式與被除錯的程式通過網路通訊。
3.通過log和core dump等檔案事後分析。
stdprm標準印表機lpt1埠
stdaux標準序列裝置com1埠
stdin並不一定來自鍵盤,stdout和stderr也並不一定顯示在螢幕上,可以將它們重定向到其他裝置或磁碟檔案上。
使用fprintf()時,第一引數推薦使用stderr而不要使用stdout,因為stderr的執行級要高一些,程式在異常退出時stderr可以輸出,而stdout就不行。
cmd >file把stdout重定向到file中
cmd >>file把stdout追加到file中
cmd 2>>file 1>&2把stderr追加到file中,再把stdout追加到stderr中
在c程式中通過freopen()進行重定向
file *freopen(const char *filename,const char mode,file *stream)
比如freopen("err.log","w",stderr)就把stderr重定向到err.log檔案了
控制log的級別
比如qt中提供qdebug(),qwarning(),gtk中也有相應的g_debug(),g_error(),核心除錯的printk()也提供很多級別。
在編譯時利用qt提供的巨集qt_no_debug_output就可以將qdebug("var=%d\n",var)去掉了,下次需要時還可以通過重新編譯找回來。
#include#ifndef loglevel_h注意上面**中用到了乙個gcc提供的可變引數的方法。#define loglevel_h
#ifndef log_level_critical
#define log_level_critical 0
#endif
#ifndef log_level_error
#define log_level_error 1
#endif
#ifndef log_level_debug
#define log_level_debug 2
#endif
#define default_log_level log_level_critical
#ifndef log_level
#define log_level log_level_default
#endif
#define _print_log(fmt,arg...) \
dowhile(0) \
#if(log_level_critical<=log_level)
#define log_critical(fmt,arg...) _print_log(fmt,##arg)
#else
#define log_critical(fmt,arg...) do{}while(0)
#endif
#if(log_level_error<=log_level)
#define log_error(fmt,arg...) _print_log(fmt,##arg)
#else
#define log_error(fmt,arg...) do{}while(0)
#endif
#if(log_level_degub<=log_level)
#define log_debug(fmt,arg...) _print_log(fmt,##arg)
#else
#define log_debug(fmt,arg...) do{}while(0)
#endif
#endif
#define _print_log(fmt,arg...) \dowhile(0) \
c99支援的可變引數巨集如下:
#define _print_log(fmt, ...)
dowhile(0)
之所以用do{}while(0)的格式來定義函式巨集,這是考慮到巨集的巢狀使用等一些情況。
#include "loglvl.h"orisun@zcypc:~/docs$ gcc testlvl.c -o testlvlint main()
orisun@zcypc:~/docs$ ./testlvl
testlvl.c:7this is a critical log.
orisun@zcypc:~/docs$ gcc testlvl.c -o testlvl -dlog_level=2
orisun@zcypc:~/docs$ ./testlvl
testlvl.c:5this is a debug log.
testlvl.c:6this is a error log.
testlvl.c:7this is a critical log.
嵌入式Linux除錯技術
嵌入式除錯方法 1.模擬器。比如qtopia core可以用奇趣提供的frame buffer模擬工具qvfb,arm硬體模擬可以用skyeye開源專案。2.遠端除錯。偵錯程式還在pc上,偵錯程式與被除錯的程式通過網路通訊。3.通過log和core dump等檔案事後分析。大多數開發人員認為kgdb...
嵌入式linux除錯技術
android模擬器只能通過埠對映的方式使用kgdbserver除錯程式。但開發板除了可以通過ip連線到kgdbserver外還可以通過串列埠進行連線。開發板同樣也帶了kgdbserver程式,可直接執行。大多數開發人員認為kgdb是最好的核心除錯工具。kgdb除了提供類似的printk函式的日誌輸...
嵌入式Linux的除錯技術
嵌入式linux的除錯技術 對於複雜的linux驅動及程式庫,需要使用各種方法對其進行除錯。如 設定斷點 逐步跟蹤 輸出除錯資訊等。本章將主要介紹如何利用開發板 android模擬器以及一些函式 工具除錯嵌入式linux核心模組 可執行程式和共享庫。列印核心除錯資訊 printk。該函式的用法與pr...