MySQL UDF(使用者定義函數)本質是無需設定進入點的動態連結庫(Windows DLL / *Nix Shared Library)。傳統除錯方式各異,本文介紹一種跨語言、跨工具、跨專案類型的「三無」除錯法——利用 Windows API OutputDebugStringA 配合 Sysinternals DebugView 即時捕捉除錯訊息,支援遠端除錯,適合急需定位錯誤且暫無完整 IDE 環境的開發者。
下載 DebugView:官方頁面。支援 Win9x/NT 系列與核心模式除錯。API 僅接受 char* 參數,複雜資料需自行格式化為字串。
OutputDebugStringA("--UDF:my_name()被調用");
#include
#include
char* __stdcall my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) {
OutputDebugStringA("--UDF:my_name()被調用");
char *me = "my name";
char debugermsg[256] = {0};
sprintf(debugermsg, "%s", me);
OutputDebugStringA(debugermsg);
return me;
}
編譯為 DLL 後部署至 MySQL 插件目錄,即可在 DebugView 主視窗即時看到輸出。
Linux/Unix 可自行查詢對應 API(如 syslog、fprintf(stderr,...) 等),同樣不影響執行效能。