Username: Password:

MySQL UDF下的一种调试方式debugview
来源:51CTO 作者:51CTO  发布时间:2008-04-15 06:14:11

MySQL的UDF实质就是个无需配置入口点的动态连接库(*Nix称之为共享库)。对于DLL的调试可谓个人有个法。现在我介绍一下一个很简单的易用的调试方法。这一方法直接利用Windows API,语言无关、研发工具无关、项目类型无关,典型的三无调试方法。并且,我们从这里讨论的调试方法支持远程调试,对于一时无法掌控研发工具原本调试器而又急于寻找程式错误的朋友此方法很实用!

首先我们需要下载接收端,当然有心人也能够自己写一个。在http://www.sysinternals.com/ntw2k/freeware/debugview.shtml 。透过debugview手册我们能够知道这个工具支持win9x/nt系列,并且支持内核调试!由于其调用的API均只能接收一个char * 类型参数,所以有些时候我们需要利用其他的函数有机组合产生人性可读提示。

为了减少复杂程度简单的以来自 http://Delphi.ktop.com.tw/topic.ASP?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,利用这种方式调试方法适当并不会造成任何困扰。

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅