MySQL UDF調(diào)試方式debugview的相關(guān)方法
更新時間:2007年07月29日 18:02:48 作者:
MySQL的UDF實質(zhì)就是一個不需要設(shè)置入口點的動態(tài)連接庫(*Nix稱之為共享庫)。對于DLL的調(diào)試可謂個人有個法?,F(xiàn)在我介紹一下一個非常簡單的易用的調(diào)試方法。這一方法直接利用Windows API,語言無關(guān)、開發(fā)工具無關(guān)、項目類型無關(guān),典型的三無調(diào)試方法。并且,我們從這里討論的調(diào)試方法支持遠(yuǎn)程調(diào)試,對于一時無法掌握開發(fā)工具原本調(diào)試器而又急于尋找程序錯誤的朋友此方法非常實用!
首先我們需要下載接收端,當(dāng)然有心人也可以自己寫一個。在 http://www.sysinternals.com/ntw2k/freeware/debugview.shtml 。透過debugview手冊我們可以知道這個工具支持win9x/nt系列,并且支持內(nèi)核調(diào)試!由于其調(diào)用的API均只能接收一個char * 類型參數(shù),所以有些時候我們需要利用其他的函數(shù)有機組合產(chǎn)生人性可讀提示。
為了減少復(fù)雜程度簡單的以來自 http://delphi.ktop.com.tw/topic.asp?TOPIC_ID=35166 討論為例,講解我是如何利用這里工具進行調(diào)試的。
1 簡單輸出一行信息,在調(diào)試開始時輸出一條簡單的信息便于我們了解debug到什么地方了。
在程序代碼中根據(jù)需要加入下邊一行
OutputDebugStringA("--UDF:my_name()被調(diào)用");
這樣一來我就知道我定義的my_name被客戶用到了,接著我要關(guān)心返回值如何。
2 輸出返回值
輸出返回值方法很多,可以自由組合。自由組合的最終目的是將一個有效的 char * 類型參數(shù)傳遞給WiNDOWS API。這里簡單的以C語言字符控制函數(shù)為例。
例子:
#include /* 函數(shù)- sprintf */
#include /* 掛接windows api */
/* ...........省略 */
char* __stdcall my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
OutputDebugStringA("--UDF:my_name()被調(diào)用"); /* 調(diào)用了?*/
char *me = "my name";
/*---- debuger start----*/
char debugermsg[256]={0};
sprintf(debugermsg, "%s", me);
OutputDebugStringA(debugermsg);
/*---- debuger end----*/
return me;
}
當(dāng)在程序中加入了類似代碼那么調(diào)試就可以開始了,利用這種方式即便不使用"debuger"方式編譯仍然可以得到所需的調(diào)試信息。
接收調(diào)試信息
接收調(diào)試信息只要打開debugview程序即可,程序主窗口可以實時返回所需要的調(diào)試信息。
其它平臺請自行查閱手冊獲得對應(yīng)的api,利用這種方式調(diào)試方法適當(dāng)并不會造成任何困擾。
首先我們需要下載接收端,當(dāng)然有心人也可以自己寫一個。在 http://www.sysinternals.com/ntw2k/freeware/debugview.shtml 。透過debugview手冊我們可以知道這個工具支持win9x/nt系列,并且支持內(nèi)核調(diào)試!由于其調(diào)用的API均只能接收一個char * 類型參數(shù),所以有些時候我們需要利用其他的函數(shù)有機組合產(chǎn)生人性可讀提示。
為了減少復(fù)雜程度簡單的以來自 http://delphi.ktop.com.tw/topic.asp?TOPIC_ID=35166 討論為例,講解我是如何利用這里工具進行調(diào)試的。
1 簡單輸出一行信息,在調(diào)試開始時輸出一條簡單的信息便于我們了解debug到什么地方了。
在程序代碼中根據(jù)需要加入下邊一行
OutputDebugStringA("--UDF:my_name()被調(diào)用");
這樣一來我就知道我定義的my_name被客戶用到了,接著我要關(guān)心返回值如何。
2 輸出返回值
輸出返回值方法很多,可以自由組合。自由組合的最終目的是將一個有效的 char * 類型參數(shù)傳遞給WiNDOWS API。這里簡單的以C語言字符控制函數(shù)為例。
例子:
#include /* 函數(shù)- sprintf */
#include /* 掛接windows api */
/* ...........省略 */
char* __stdcall my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
OutputDebugStringA("--UDF:my_name()被調(diào)用"); /* 調(diào)用了?*/
char *me = "my name";
/*---- debuger start----*/
char debugermsg[256]={0};
sprintf(debugermsg, "%s", me);
OutputDebugStringA(debugermsg);
/*---- debuger end----*/
return me;
}
當(dāng)在程序中加入了類似代碼那么調(diào)試就可以開始了,利用這種方式即便不使用"debuger"方式編譯仍然可以得到所需的調(diào)試信息。
接收調(diào)試信息
接收調(diào)試信息只要打開debugview程序即可,程序主窗口可以實時返回所需要的調(diào)試信息。
其它平臺請自行查閱手冊獲得對應(yīng)的api,利用這種方式調(diào)試方法適當(dāng)并不會造成任何困擾。
相關(guān)文章
幾種MySQL中的聯(lián)接查詢操作方法總結(jié)
這篇文章主要介紹了幾種MySQL中的聯(lián)接查詢操作方法總結(jié),文中包括一些代碼舉例講解,需要的朋友可以參考下2015-04-04
MySQL創(chuàng)建內(nèi)部臨時表的所有場景盤點
這篇文章主要為大家介紹了MySQL創(chuàng)建內(nèi)部臨時表的所有場景盤點,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
登錄MySQL時出現(xiàn)Authentication plugin ‘caching_sha2_pass
這篇文章主要介紹了登錄MySQL時出現(xiàn)Authentication plugin ‘caching_sha2_password‘ reported error錯誤的解決方案,文中通過圖文結(jié)合的形式講解的非常詳細(xì),對大家的解決問題有一定的幫助,需要的朋友可以參考下2024-12-12
MySQL 5.7之關(guān)于SQL_MODE的設(shè)置
這篇文章主要介紹了MySQL 5.7之關(guān)于SQL_MODE的設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
重置MySQL 8.0 Root密碼的簡便方法小結(jié)
這篇文章主要給大家介紹了幾種輕松重置 MySQL 8.0 Root 密碼的簡便方法,文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-10-10
Mysql刪除數(shù)據(jù)以及數(shù)據(jù)表的方法實例
這篇文章主要給大家介紹了關(guān)于Mysql刪除數(shù)據(jù)以及數(shù)據(jù)表的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

