MySQL UDF的除錯方式 - debugview (轉)

amyz發表於2007-11-12
MySQL UDF的除錯方式 - debugview (轉)[@more@]

My UDF的方式

的UDF實質就是一個不需要設定入口點的動態連線庫(*Nix稱之為共享庫)。對於DLL的除錯可謂個人有個法。現在我介紹一下一個非常簡單的易用的除錯方法。這一方法直接利用 ,語言無關、開發工具無關、專案型別無關,典型的三無除錯方法。並且,我們從這裡討論的除錯方法支援除錯,對於一時無法掌握開發工具原本偵錯程式而又急於尋找錯誤的朋友此方法非常實用!

首先我們需要接收端,當然有心人也可以自己寫一個。在 view.shtml"> 。透過debugview手冊我們可以知道這個工具支援/nt系列,並且支援核心除錯!由於其的API均只能接收一個char * 型別引數,所以有些時候我們需要利用其他的有機組合產生人性可讀提示。

為了減少複雜程度簡單的以來自 .ktop.com.tw/topic.?TOPIC_ID=35166"> 討論為例,講解我是如何利用這裡工具進行除錯的。

1 簡單輸出一行資訊,在除錯開始時輸出一條簡單的資訊便於我們瞭解debug到什麼地方了。
在程式程式碼中根據需要加入下邊一行
OutputDebugStringA("--UDF:my_name()被呼叫");
這樣一來我就知道我定義的my_name被客戶用到了,接著我要關心返回值如何。

2 輸出返回值
輸出返回值方法很多,可以自由組合。自由組合的最終目的是將一個有效的 char * 型別引數傳遞給WiNDOWS API。這裡簡單的以C語言字元控制函式為例。

例子:

#include   /* 函式- sprintf */
#include /* 掛接windows api */
/* ...........省略  */
char* __stdcall my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
OutputDebugStringA("--UDF:my_name()被呼叫"); /* 呼叫了?*/
char *me = "my name";

/*---- debuger start----*/
  char debugermsg[256]={0};
  sprintf(debugermsg, "%s", me);
  OutputDebugStringA(debugermsg);
  /*---- debuger end----*/

 return me;
}

當在程式中加入了類似程式碼那麼除錯就可以開始了,利用這種方式即便不使用"debuger"方式編譯仍然可以得到所需的除錯資訊。

接收除錯資訊

接收除錯資訊只要開啟debugview程式即可,程式主視窗可以實時返回所需要的除錯資訊。

其它平臺請自行查閱手冊獲得對應的api,利用這種方式除錯方法適當並不會造成任何困擾。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981895/,如需轉載,請註明出處,否則將追究法律責任。

相關文章