mysql linux debug_5.3.3 在Linux环境里调试MySQL(1)

5.3.3 在Linux环境里调试MySQL(1)

高质量的开发工具(尤其是各种GNU工具)是Linux取得巨大成功的原因之一。就拿调试器来说吧,Linux平台上的许多调试器不仅可以用来调试单线程系统,还可以用来调试多线程系统。

可以在Linux平台上使用的调试器很多,其中***的是gdb和ddd。在接下来的几个小节里,我为这两种调试工具各自准备了一个调试MySQL系统的例子,这两个例子的场景是分析发出SHOW AUTHORS命令时会发生什么情况。下面先从gdb调试器开始讨论,稍后再向大家介绍ddd调试器的用法。

1.使用gdb调试器

请大家先回到代码清单5-1去重温一下show_authors()函数的完整代码。需要做的***件事情是在调试模式下编译我的服务器。具体地说,就是在MySQL源代码的根文件夹里发出如下所示的命令:

291557b8327b5f3dd35429e6d9f855ac.png

这些命令将把相应的调试信息添加到编译出来的MySQL系统里,这样才能用调试器去调试它。接下来,我将使用mysqld-debug命令启动这个服务器。代码清单5-11是服务器启动时给出的启动信息。

注意 你应该先关闭所有正在运行的MySQL服务器,再启动你在调试模式下编译出来的那个服务器。也可以不这样做--这只是以防万一,以避免费了半天劲才发现自己调试的是另外一个MySQL服务器进程。

代码清单5-11  在调试模式下启动MySQL服务器

baba89b4365d268b306161c8c1a86df5.png请注意,我正在使用的是/var/lib/mysql/mysql.sock套接字。这可以让我在调试模式下运行MySQL服务器的一份副本,而不会影响到另一个正在运行的MySQL服务器。不过,还需要让客户程序使用同一个套接字才行。但首先,需要确定我这个服务器的进程ID。可以用ps -A命令列出所有正在运行的进程并找出这个ID。另外一个办法是用ps-A | grep mysql命令只列出名字里带有mysql字样的进程ID。下面是这个命令的执行结果:

9552bfbe3aa5551f4948548d934a5b44.png

查出MySQL服务器的进程ID之后,就可以启动gdb调试器并用attach 10592命令把它关联到正确的进程上了。我还想在show_authors()函数里设置一个断点。在仔细查看过有关的源代码文件后,我决定把断点设在第207行,相应的命令是break /home/Chuck/MySQL/mysql-5.1.9-beta/sql/ sql_show.cc:207。这个命令的格式是file:line#。设置好了断点,就可以发出continue命令让那个进程开始执行了,gdb调试器将在遇到断点的时候让程序暂停下来。代码清单5-12给出了一个完整的调试过程。

代码清单5-12  运行gdb调试器

f4ae4ed6e19685cdb69919e20ab1304d.png

d8b1e048ad8f1c5c51c1a43fc5c26cf6.png

8589e394036b37dbefd1ff32e3955930.png

08c1fdf84e973b7d656a05fd487c7046.png为了看到服务器的动作,还需要在运行gdb调试器的同时启动一个客户程序来发出查询命令。下面这条命令启动了MySQL命令行客户端程序。

573c4854664e4a95b9f8592443ff51a2.png

【责任编辑:云霞 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值