1. 程式人生 > >eclipse cdt:使用Grep Console外掛 實現log輸出自動中轉到原始碼

eclipse cdt:使用Grep Console外掛 實現log輸出自動中轉到原始碼

eclipse 中有一項很有用的特性,就是在控制檯輸出日誌時,只要滿足如下圖的格式,就可以顯示為原始碼連結,滑鼠點選就可以到達日誌輸出的原始碼位置 。
這裡寫圖片描述

然而這個特性只對java程式碼有效,對c/c++程式碼無效,c/c++程式碼在控制檯的日誌輸出eclipse只當作普通文字,不會自動識別其中的原始碼位置。這在除錯的時候增加了一點麻煩,找到原始碼的位置就要多花幾秒的時間。
能不能解決這個問題呢?在google上找了一天,發現了這個叫grep console的eclipse外掛,可以滿足我的要求。
先看看grep console外掛實現的效果(ubuntu16 + eclipse neon.3):
這裡寫圖片描述


按CTRL鍵滑鼠點選藍色連結,就可以開啟原始碼到指定的行號

安裝grep console外掛

grep console外掛安裝很簡單,以下是 grep console的官網,

安裝grep console外掛可以直接在 Eclipse Marketplace中搜索grep console找到後點install就可以了。
安裝好外掛後在preferences中會多出一個Grep Console專案,看到它說明你的外掛安裝好了。

這裡寫圖片描述

配置Grep Console

如果你不想麻煩,可以用我做的一套適用於c/c++的配置。
先下載這個 xml文字: https://gitee.com/l0km/codes/7xc6s8tbyha9ne0quwkdp60

到本地
如下圖開啟grep console的配置介面,也可以從eclipse選單Windows\Preferences\Grep Console開啟。
這裡寫圖片描述

如下圖將下載的配置檔案載入進來。
這裡寫圖片描述
載入之後,如下圖要把新的配置全部勾選,才能生效。
這裡寫圖片描述
然後你就可以嘗試在自己的程式碼中用輸出日誌看看效果了。下面是我寫的一組用於輸出日誌的巨集定義,可以直接用於日誌輸出自動新增原始碼檔名和行號:

#include <stdio.h>

#define FL_DEF_STRING(x) #x

// debug 除錯工具
#define fl_printf(out,type,fmt,...) \
fprintf(out,"[" FL_DEF_STRINGt(type) "]" "%s:%d: " fmt "\n",__FILE__,__LINE__,## __VA_ARGS__) #define fl_log_info(fmt,...) fl_printf(stdout,INFO,fmt,## __VA_ARGS__) #ifdef NDEBUG #define fl_log_debug(fmt,...) #define FL_LOG_DEBUG_IF(exp,fmt,...) #else #define fl_log_debug(fmt,...) fl_printf(stdout,DEBUG,fmt,## __VA_ARGS__) #define FL_LOG_DEBUG_IF(exp,fmt,...) if(exp)fl_log_debug(fmt,## __VA_ARGS__); #endif #define fl_log_warn(fmt,...) fl_printf(stderr,WARN,fmt,## __VA_ARGS__) #define fl_log_error(fmt,...) fl_printf(stderr,ERROR,fmt,## __VA_ARGS__) #define FL_LOG_WARN_IF(exp,fmt,...) if(exp)fl_log_warn(fmt,## __VA_ARGS__); #define FL_LOG_ERROR_IF(exp,fmt,...) if(exp)fl_log_error(fmt,## __VA_ARGS__);

開始你的定製

如果你對我的grep console配置檔案中的顏色及日誌格式定義不滿意可以根據自己的需要修改
如下圖雙擊其中一個配置(Debug),可以修改用於識別日誌格式的正則表示式
這裡寫圖片描述
開啟下面的介面可以根據你的需要修改grep console搜尋原始碼的基準位置
這裡寫圖片描述