5.3.3 在Linux环境里调试MySQL(1)
高质量的开发工具(尤其是各种GNU工具)是Linux取得巨大成功的原因之一。就拿调试器来说吧,Linux平台上的许多调试器不仅可以用来调试单线程系统,还可以用来调试多线程系统。
可以在Linux平台上使用的调试器很多,其中***的是gdb和ddd。在接下来的几个小节里,我为这两种调试工具各自准备了一个调试MySQL系统的例子,这两个例子的场景是分析发出SHOW AUTHORS命令时会发生什么情况。下面先从gdb调试器开始讨论,稍后再向大家介绍ddd调试器的用法。
1.使用gdb调试器
请大家先回到代码清单5-1去重温一下show_authors()函数的完整代码。需要做的***件事情是在调试模式下编译我的服务器。具体地说,就是在MySQL源代码的根文件夹里发出如下所示的命令:
这些命令将把相应的调试信息添加到编译出来的MySQL系统里,这样才能用调试器去调试它。接下来,我将使用mysqld-debug命令启动这个服务器。代码清单5-11是服务器启动时给出的启动信息。
注意 你应该先关闭所有正在运行的MySQL服务器,再启动你在调试模式下编译出来的那个服务器。也可以不这样做--这只是以防万一,以避免费了半天劲才发现自己调试的是另外一个MySQL服务器进程。
代码清单5-11 在调试模式下启动MySQL服务器
请注意,我正在使用的是/var/lib/mysql/mysql.sock套接字。这可以让我在调试模式下运行MySQL服务器的一份副本,而不会影响到另一个正在运行的MySQL服务器。不过,还需要让客户程序使用同一个套接字才行。但首先,需要确定我这个服务器的进程ID。可以用ps -A命令列出所有正在运行的进程并找出这个ID。另外一个办法是用ps-A | grep mysql命令只列出名字里带有mysql字样的进程ID。下面是这个命令的执行结果:
查出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调试器
为了看到服务器的动作,还需要在运行gdb调试器的同时启动一个客户程序来发出查询命令。下面这条命令启动了MySQL命令行客户端程序。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0