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,利用这种方式调试方法适当并不会造成任何困扰。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

RTX 5090要首发 性能要翻倍!三星展示GDDR7显存

三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。

首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。

据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。