SlideShare a Scribd company logo
1 of 12
1
What is Dbug?
a cc++ program debugging package
by Fred Fish.
http://dbug.sourceforge.net
mysql使用dbug来调试跟踪源代码
2
1.Dbug特点
内核级别 debugger
对性能影响小(小于10%)
一些很方便调试的功能(跟踪函数流程打印所有变量值等等)
2.Dbug的使用
1.下载dbug源码
2.将dbug.h和dbug.c与你的程序源码放在一起
3.在你的源码中include “dbug.h”
4.在你的源码中使用dbug吧
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
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
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));
6
MySQL中的Dbug
在MySQL的源码中,大量使用了dbug来跟踪调试代码:
mysql默认已经在代码中的很多地方都加上了DBUG_XX了,而且很详细.
如:
1.在很多函数的入口加上了DBUG_ENTER(“函数名”)
2.在一些地方DBUG_PRINT()打印输入重要变量的值.
你也可以自己在需要的地方添加DBUG_XX,来观察你所关心的信息.(添加完了记得重新make)
7
MySQL中的Dbug
mysql中如何使用?
1.编译的时候加上--debug参数: ./configure --with-debug
2.启动mysql的时候加上参数:mysqld_safe --debug&
3.启动后,mysql默认在/tmp/下生成mysqld.trace文件,记录了所有的dbug跟踪信息.这个文件是会
动态更新的.
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
说明:
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
10
每次在源码中添加了DBUG信息,重新make,再重启mysqld很麻烦?
写个脚本来帮忙
下载地址:
https://docs.google.com/leaf?id=0B0Y0NkwfPVE6ODQ3ZDAzNGYtZTBhYS00MzQxLTg5Y
zctOTJjYWRhMDA4NjU2&sort=name&layout=list&num=50
作用:
1.重新make sql目录下的源码
2.将mysqld覆盖原来的mysqld
3.重启mysqld(可选择)
11
参考:
1.DBUG User Manual
2.Creating Trace Files :
http://dev.mysql.com/doc/refman/5.0/en/making-trace-files.html
周旻钧@taobao DBA team
https://www.google.com/profiles/tim0405
mysql dbug

More Related Content

Similar to mysql dbug

Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
晓锋 陈
 
2006年招聘试题
2006年招聘试题2006年招聘试题
2006年招聘试题
yiditushe
 
中心教员J2 Ee面试题
中心教员J2 Ee面试题中心教员J2 Ee面试题
中心教员J2 Ee面试题
yiditushe
 
Python 入门
Python 入门Python 入门
Python 入门
kuco945
 

Similar to mysql dbug (20)

dbug in mysql
dbug in mysqldbug in mysql
dbug in mysql
 
Android 智慧型手機程式設計
Android 智慧型手機程式設計Android 智慧型手機程式設計
Android 智慧型手機程式設計
 
Reply
ReplyReply
Reply
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映基于Android ndk的软件开发简介 放映
基于Android ndk的软件开发简介 放映
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂
 
嵌入式測試驅動開發
嵌入式測試驅動開發嵌入式測試驅動開發
嵌入式測試驅動開發
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
Go集成c&c++代码
Go集成c&c++代码Go集成c&c++代码
Go集成c&c++代码
 
2006年招聘试题
2006年招聘试题2006年招聘试题
2006年招聘试题
 
中心教员J2 Ee面试题
中心教员J2 Ee面试题中心教员J2 Ee面试题
中心教员J2 Ee面试题
 
Python 入门
Python 入门Python 入门
Python 入门
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
 
Win dbg入门
Win dbg入门Win dbg入门
Win dbg入门
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
 

mysql dbug