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
搜尋原始碼的基準位置