MySQL UDF 本質是無需進入點的 DLL(Linux 為 .so)。傳統除錯器難以附加到 mysqld 進程,DebugView 提供**免工具、跨語言、支援遠端**的三無除錯方案。
OutputDebugStringAWindows API,接收單一 char* 參數,DebugView 即時顯示。
#include
#include
char* __stdcall my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) {
// 1. 標記函數被呼叫
OutputDebugStringA("--UDF:my_name() called");
// 2. 輸出回傳值
char *result = "my name";
char debug_msg[256] = {0};
sprintf(debug_msg, "return: %s", result);
OutputDebugStringA(debug_msg);
return result;
}
OutputDebugStringA 呼叫,編譯 DLLplugin_dir)CREATE FUNCTION my_name RETURNS STRING SONAME 'my_udf.dll';SELECT my_name();,DebugView 即時顯示除錯訊息sprintf(buf, "args: %d, %s", args->arg_count, args->args[0])Computer → Connect)syslog 或 dmesg,或自行實作 UDP 發送至收集端優勢: 無需 Visual Studio、GDB、不重啟 mysqld、不影響線上效能、支援 C/C++/Delphi/Go 等所有能呼叫 Win32 API 的語言。