MySQL UDF调试方式debugview的相关方法

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,利用这种方式调试方法适当并不会造成任何困扰。

(0)

相关推荐

  • mysql的udf编程之非阻塞超时重传

    MySQL的UDF(User Defined Function)类似于一种API, 用户根据一定的规范用C/C++(或采用C调用规范的语言)编写一组函数(UDF),然后编译成动态链接库,通过DROP FUNCTION语句来加载和卸载UDF.UDF被加载后可以像调用MySQL的内置函数一样来调用它,并且服务器在启动时会自动加载原来存在的UDF. 复制代码 代码如下: #ifdef STANDARD/* STANDARD is defined, don't use any mysql functio

  • linux提权用的一个技巧

    作者:xi4oyu 一个test: [xiaoyu@localdomain ~]$ echo $BASH_ENV [xiaoyu@localdomain ~]$ export BASH_ENV="/tmp/.bashrc" [xiaoyu@localdomain ~]$ echo $BASH_ENV /tmp/.bashrc [xiaoyu@localdomain ~]$ cat /tmp/.bashrc #!/bin/bash echo "Hello" [xiao

  • mysql下mysql-udf-http效率测试小记

    看到张宴的博客上关于"http/rest客户端的文章",怎样安装啥的直接都跳过,下面直接进入测试阶段,测试环境:虚拟机 复制代码 代码如下: [root@localhost ~]# uname -a Linux sunss 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux 内存和交换分区: 复制代码 代码如下: [root@localhost ~]# free -m total use

  • mysql中使用UDF自动同步memcached效率笔记

    接上篇:mysql使用mysql-udf-http效率测试笔记 ,这次不使用rest架构,而是使用:libmemcached和memcached_functions_mysql,测试版本是: libmemcached-0.34.tar.gz和memcached_functions_mysql-0.9.tar.gz,其它版本配对都有问题,我安装测试过有问题的版本有: 复制代码 代码如下: memcached_functions_mysql-1.1在: libmemcached-0.49\libme

  • 使用mysql_udf与curl库完成http_post通信模块示例

    使用mysql_udf与curl库完成http_post通信模块(mysql_udf,multi_curl,http,post) 这个模块其目前主要用于xoyo江湖的sns与kingsoft_xoyo自主研发的TCSQL数据库做数据同步,当有feed插入sns数据库,使用触 发器调用该模块,向tcsql数据库发送同步数据.也可以使用该模块与其它使用socket接口的数据库或程序做转发与同步.http_post模块主要使用mysql_udf接口,与curl库两部分技术.mysql_udf是mysq

  • Linux利用UDF库实现Mysql提权

    环境: os:linux(bt5)   database:mysql   简述: 通过自定义库函数来实现执行任意的程序,这里只在linux下测试通过,具体到windows,所用的dll自然不同.   要求:  在mysql库下必须有func表,并且在‑‑skip‑grant‑tables开启的情况下,UDF会被禁止:   过程: 得到插件库路径 找对应操作系统的udf库文件 利用udf库文件加载函数并执行命令 1,得到插件库路径 mysql> show variables like "%p

  • MySQL UDF调试方式debugview的相关方法

    MySQL的UDF实质就是一个不需要设置入口点的动态连接库(*Nix称之为共享库).对于DLL的调试可谓个人有个法.现在我介绍一下一个非常简单的易用的调试方法.这一方法直接利用Windows API,语言无关.开发工具无关.项目类型无关,典型的三无调试方法.并且,我们从这里讨论的调试方法支持远程调试,对于一时无法掌握开发工具原本调试器而又急于寻找程序错误的朋友此方法非常实用!  首先我们需要下载接收端,当然有心人也可以自己写一个.在 http://www.sysinternals.com/ntw

  • Mysql中调试存储过程最简单的方法

    以前同事告诉我用临时表插入变量数据来查看,但是这种方法过于麻烦,而且Mysql没有比较好的调试存储过程的工具.今天google了下发现可以用select + 变量名的方法来调试 具体方法: 在你的存储过程中加入如下语句: SELECT 变量1,变量2; 然后用mysql自带的cmd程序进入mysql> 下. call 你的存储过程名(输入参数1,@输出参数);(注:这里帮助下新同学,如果你的存储过程有输出变量,那么在这里只需要加 @ 然后跟任意变量名即可); 即可发现你的变量值被打印到了cmd下

  • MySQL 语句注释方式简介

    MySQL支持三种注释方式: 1.从'#'字符从行尾. 2.从'-- '序列到行尾.请注意'-- '(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格.tab.换行符等等). 3.从/*序列到后面的*/序列.结束序列不一定在同一行中,因此该语法允许注释跨越多行. 下面的例子显示了3种风格的注释: //在mysql中如何写注释语句 mysql> SELECT 1+1; # 这个注释直到该行结束 mysql> SELECT 1+1; -- 这个注释直到该行结束 mysql>

  • MySql二进制连接方式详解

    使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysql服务器的简单实例: 复制代码 代码如下: [root@host]# mysql -u root -p Enter password:****** 在登录成功后会出现 mysql> 命令提示窗口,你可以在上面执行任何 SQL 语句. 以上命令执行后,登录成功输出结果如下: Welcome to the MySQL monitor. Commands

  • python实现处理mysql结果输出方式

    在运维过程中,经常需要读取mysql的结果输出并进行响应的处理,这节介绍如何用Python读取mysql结果表并进行相应的整理. 进行mysql结果文件输出: mysql -h10.20.10.207 -uroot -ppasswd test -e "select sendorderid, (price*100),mob from interfacelog where merid='****' >/home/anan/interfacelog.txt ##这里写你需要执行的sql语句将结果

  • c++代码调试方式的几点建议

    1.代码调试的重要性 代码调试在程序开发阶段占有举足轻重的地位,可见代码调试的重要性.但是有一点必须强调:程序是设计出来的,而不是调试出来的.这是所有程序员必须牢记在心的一条准则.一个没有设计或者这几得很糟糕的程序,无论怎样调试,也不会成为一个合格的程序. 程序有着良好的设计的前提下,软件开发的过程中,编码错误在所难免.所有程序可能出现的错误可分为两类:语法错误和逻辑错误.调试通常是指在消除了语法错误之后,发现程序中的逻辑错误的过程.对C/C++程序进行调试,有这样集中常用的手段.它们既可以单独

  • 使用python连接mysql数据库数据方式

    目录 1.fetchone/fetchmany/fetchall 2.pandas.read_sql() 前言: 使用python连接mysql数据库数据 有以下两种读取数据的方式推荐: 一种是通过游标,及fetch系列方法进行操作,另一种是通过pandas的read_sql()进行读取并操作.各种方法各有优劣,可根据具体情形,择优选择使用. 示例如下: 1.fetchone/fetchmany/fetchall 获取一条.多条.全部条. import pymysql # 数据库相关信息 dbH

  • mysql 获取时间方式

    目录 1.获取指定时间 2.获取当前时间:年-月-日 时:分:秒 2.1.函数 now() : 2.2.函数 SYSDATE() 2.3 .函数 current_timestamp() 2.4.函数:localtime() 2.5.函数:localtimestamp() 3.获取当前时间:年-月-日 3.1.函数:CURRENT_DATE() 3.2.函数:CURDATE() 3.3.函数:utc_date() 4.返回本月最后一天时间 1.获取指定时间 函数:date_format() 转换

  • C++ 内存泄漏调试方式

    C++和其他高级语言不同,需要自行管理内存,项目大\调用多,容易内存泄漏.内存申请释放使用malloc/free和new delete两种方式. 当内存报错弹出一个陌生的地址,我一脸懵逼,不清楚是哪个地方出的错,特别是程序退出的时候报错更不好定位.可以使用第三方工具来定位解决,也可以自己想办法解决. 我在做神经网络训练的时候碰到一个的BUG,发送完训练图片之后直接提示使用了非法内存. HEAP[Test.exe]: HEAP: Free Heap block 0000015E950E4A60 m

  • MySql各种查询方式详解

    目录 新增 聚合查询 分组查询 条件查询 联合查询 自连接 合并查询 新增 insert into B select * from A://将A表的信息通过查询新增到B表中去 聚合查询 count://返回到查询的数据总和 sum://返回到查询的数据总和(只对数字有意义) 只对数字有意义 avg/max/min;//返回查询数据的平均值/最大值/最小值(只对数字有意义) 分组查询 select * from 表名 group by 分组条件: 这里是先执行分组,再根据分组执行每个组的聚合函数.

随机推荐