|
導(dǎo)讀數(shù)據(jù)庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫”是以一定方式儲存在一起、能與多個(gè)用戶共享、具有盡可能小的冗余度、與應(yīng)... 數(shù)據(jù)庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫”是以一定方式儲存在一起、能與多個(gè)用戶共享、具有盡可能小的冗余度、與應(yīng)用程序彼此獨(dú)立的數(shù)據(jù)集合。 MySQL的UDF實(shí)質(zhì)就是一個(gè)不需要設(shè)置入口點(diǎn)的動態(tài)連接庫(*Nix稱之為共享庫)。對于DLL的調(diào)試可謂個(gè)人有個(gè)法。現(xiàn)在我介紹一下一個(gè)非常簡單的易用的調(diào)試方法。這一方法直接利用Windows API,語言無關(guān)、開發(fā)工具無關(guān)、項(xiàng)目類型無關(guān),典型的三無調(diào)試方法。并且,我們從這里討論的調(diào)試方法支持遠(yuǎn)程調(diào)試,對于一時(shí)無法掌握開發(fā)工具原本調(diào)試器而又急于尋找程序錯(cuò)誤的朋友此方法非常實(shí)用! 首先我們需要下載接收端,當(dāng)然有心人也可以自己寫一個(gè)。在 http://www.sysinternals.com/ntw2k/freeware/debugview.shtml 。透過debugview手冊我們可以知道這個(gè)工具支持win9x/nt系列,并且支持內(nèi)核調(diào)試!由于其調(diào)用的API均只能接收一個(gè)char * 類型參數(shù),所以有些時(shí)候我們需要利用其他的函數(shù)有機(jī)組合產(chǎn)生人性可讀提示。 為了減少復(fù)雜程度簡單的以來自 http://delphi.ktop.com.tw/topic.asp?TOPIC_ID=35166 討論為例,講解我是如何利用這里工具進(jìn)行調(diào)試的。
1 簡單輸出一行信息,在調(diào)試開始時(shí)輸出一條簡單的信息便于我們了解debug到什么地方了。 在程序代碼中根據(jù)需要加入下邊一行 OutputDebugStringA("--UDF:my_name()被調(diào)用"); 這樣一來我就知道我定義的my_name被客戶用到了,接著我要關(guān)心返回值如何。
2 輸出返回值 輸出返回值方法很多,可以自由組合。自由組合的最終目的是將一個(gè)有效的 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程序即可,程序主窗口可以實(shí)時(shí)返回所需要的調(diào)試信息。 其它平臺請自行查閱手冊獲得對應(yīng)的api,利用這種方式調(diào)試方法適當(dāng)并不會造成任何困擾。
全新的路由器不僅讓你更穩(wěn)定快速地連接無線網(wǎng)絡(luò),更可以讓家中的智能設(shè)備連接在一起。
|