More Related Content
Similar to mysql dbug (20)
mysql dbug
- 1. 1
What is Dbug?
a cc++ program debugging package
by Fred Fish.
http://dbug.sourceforge.net
mysql使用dbug来调试跟踪源代码
- 3. 3
Dbug示例:
#include "dbug.h"
#include <stdio.h>
static void sub2 (char *arg)
{
DBUG_ENTER ("sub2");
DBUG_PRINT ("info", ("Got argument: '%s'", arg));
printf ("%sn", arg);
DBUG_VOID_RETURN;
}
static int sub1 (void)
{
DBUG_ENTER ("sub1");
sub2 ("Hello world!");
sub2 ("Hello earth!");
sub2 ("Hello programmer!");
DBUG_RETURN (0);
}
int main ()
{
int ret = 0;
DBUG_PUSH ("d:t:O");
ret = sub1 ();
DBUG_PRINT ("info", ("Returned value: %d",
ret));
return 0;
}
- 4. 4
Dbug示例:
编译执行:
gcc example.c dbug.c -o exp
./exp
输出:
>sub1
| >sub2
| | info: Got argument: 'Hello world!'
Hello world!
| <sub2
| >sub2
| | info: Got argument: 'Hello earth!'
Hello earth!
| <sub2
| >sub2
| | info: Got argument: 'Hello programmer!'
Hello programmer!
| <sub2
<sub1
info: Returned value: 0
- 5. 5
Dbug package提供的一些方法(仅列出最常用的):
DBUG_ENTER
进入函数时调用,参数是一个字符串.且必须要有一个DBUG_RETURN相配对.
EX: DBUG_ENTER ("main");
DBUG_RETURN
退出某个函数时调用,参数是返回值.
EX: DBUG_RETURN (value);
EX:DBUG_VOID_RETURN; (无返回值时)
DBUG_PRINT
最常用,输出信息.两个参数,第一个参数是一个keyword,第二个参数是printf的
format string.
EX: DBUG_PRINT ("eof", ("end of file found"));
EX: DBUG_PRINT ("type", ("type is %x", type));
EX: DBUG_PRINT ("stp", ("%x -> %s", stp, stp -> name));
- 8. 8
trace文件示例:
T@1 : >init_tmpdir
T@1 : | enter: pathlist: NULL
T@1 : | >init_dynamic_array
T@1 : | | >my_malloc
T@1 : | | | my: size: 8 my_flags: 0
T@1 : | | | exit: ptr: 0x6aed620
T@1 : | | <my_malloc
T@1 : | <init_dynamic_array
T@1 : | >cleanup_dirname
T@1 : | | enter: from: '/tmp'
T@1 : | | exit: to: '/tmp'
T@1 : | <cleanup_dirname
T@1 : | >my_malloc
T@1 : | | my: size: 5 my_flags: 16
T@1 : | | exit: ptr: 0x6aed640
T@1 : | <my_malloc
T@1 : <init_tmpdir
- 9. 9
说明:
1.T@n的意思是表明这是在第n个线程中.
2.>init_tmpdir中的>的意思是进入函数.
3.<init_tmpdir中的<的意思是退出函数.
4.树形结构,清晰
5.mysqld_safe& --debug 会产生很多的信息,可以加上命令关注我们所关心的:
mysqld_safe --debug=-#d,info,error,query,taobao:t:r:O,/tmp/mysqld.trace&
1.d命令是指定tag,我们可以指定tag方便查看我们所关心的信息
例如我在源码中添加:
DBUG_PRINT( “taobao” , (”x is : %d” , x) );
这条语句的tag是taobao,那么我们用上面的方法启动mysqld后,就可以在trace文件直接查找
2.t命令开启函数控制流
3.O命令指定输出的trace文件且存在的话打开时清空其内容
更多的命令可以查看DBUG manual