c 读取mysql另一个窗体中显示出来_MYSQL 源码阅读 四

MYSQL源码阅读 一

MYSQL源码阅读 二

MYSQL源码阅读 三

所谓动态看代码就类似我们用JAVA开发样,进入调试代码,

看函数怎么调函数,查看函数传递的变量值,设置某行为断点,当运行此行的时候就暂停,然后查相应的变量,表达式的值.步进,步出!

不过小仙上次写C语言的使用NETBEAN 图形工具来调用GDB的,所以比较方便,不用记那么多命令。

毕竟LINUX下好多命令,每个命令有贼多参数,参看起来又不那么友好,不可能所有参数都学一遍,经常百度下该命令,常用命令,和使用列子!

启动调试命令GDB

[root@localhost u01]# gdb

GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-51.el7

Copyright (C) 2013 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-redhat-linux-gnu".

For bug reporting instructions, please see:

.

输入HELP命令

(gdb) help

List of classes of commands:

aliases -- Aliases of other commands

breakpoints -- Making program stop at certain points

data -- Examining data

files -- Specifying and examining files

internals -- Maintenance commands

obscure -- Obscure features

running -- Running the program

stack -- Examining the stack

status -- Status inquiries

support -- Support facilities

tracepoints -- Tracing of program execution without stopping the program

user-defined -- User-defined commands

Type "help" followed by a class name for a list of commands in that class.

Type "help all" for the list of all commands.

Type "help" followed by command name for full documentation.

Type "apropos word" to search for commands related to "word".

Command name abbreviations are allowed if unambiguous.

退出命令

(gdb) quit

GDB 命令简介

篇幅较长,大家稍微看看有个印象

启动GDB的方法有以下几种:

gdb

program也就是你的执行文件,一般在当前目录下。

gdb core

用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

gdb

如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。

gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

2. 当以gdb 方式启动gdb后,gdb会在PATH路径和当前目录中搜索的源文件

3. 暂停/恢复程序运行

调试程序中,暂停程序运行是必须的,GDB可以方便地暂停程序的运行。

你可以设置程序的在哪行停住,在什么条件下停住,在收到什么信号时停住等等。

以便于你查看运行时的变量,以及运行时的流程。

当进程被gdb停住时,你可以使用info program 来查看程序的是否在运行,

进程号,被暂停的原因。

在gdb中,我们可以有以下几种暂停方式:断点(BreakPoint)、

观察点(Watch Point)、捕捉点(Catch Point)、信号(Signals)、

线程停止(Thread Stops)。如果要恢复程序运行,可以使用c或是 continue命令。

4. 设置断点(Break Points)

我们用break命令来设置断点。下面有几点设置断点的方法:

break

在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。

break

在指定行号停住。

break +offset

break -offset

在当前行号的前面或后面的offset行停住。offiset为自然数。

break filename:linenum

在源文件filename的linenum行处停住。

break filename:function

在源文件filename的function函数的入口处停住。

break *address

在程序运行的内存地址处停住。

break

break命令没有参数时,表示在下一条指令处停住。

break ... if

...可以是上述的参数,condition表示条件,在条件成立时停住。

比如在循环体中,可以设置break if i==100,表示当i为100时停住程序。

查看断点时,可使用info命令,如下所示:(注:n表示断点号)

info breakpoints [n]

info break [n]

5. 设置观察点(WatchPoint)

观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,

如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:

watch

为表达式(变量)expr设置一个观察点。一表达式值有变化时,马上停住程序。

rwatch

当表达式(变量)expr被读时,停住程序。

awatch

当表达式(变量)的值被读或被写时,停住程序。

info watchpoints

列出当前所设置了的所有观察点。

[编辑] 设置捕捉点(CatchPoint)

你可设置捕捉点来捕捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常。

设置捕捉点的格式为:

catch

当event发生时,停住程序。event可以是下面的内容:

throw 一个C++抛出的异常。(throw为关键字)

catch 一个C++捕捉到的异常。(catch为关键字)

exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)

fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)

vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用)

load 或 load 载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用)

unload 或 unload 卸载共享库(动态链接库)时。(unload为关键字,目前此功能只在HP-UX下有用)

tcatch

只设置一次捕捉点,当程序停住以后,该点被自动删除。

6. 维护停止点

上面说了如何设置程序的停止点,GDB中的停止点也就是上述的三类。

在GDB中,如果你觉得已定义好的停止点没有用了,

你可以使用delete、clear、disable、enable这几个命令来进行维护。

clear

清除所有的已定义的停止点。

clear

clear

清除所有设置在函数上的停止点。

clear

clear

清除所有设置在指定行上的停止点。

delete [breakpoints] [range...]

删除指定的断点,breakpoints为断点号。如果不指定断点号,则表示删除所有的断点。

range 表示断点号的范围(如:3-7)。其简写命令为d。

比删除更好的一种方法是disable停止点,disable了的停止点,GDB不会删除,

当你还需要时,enable即可,就好像回收站一样。

disable [breakpoints] [range...]

7. 恢复程序运行和单步调试

当程序被停住了,你可以用continue命令恢复程序的运行直到程序结束,

或下一个断点到来。也可以使用step或next命令单步跟踪程序。

continue [ignore-count]

c [ignore-count]

fg [ignore-count]

恢复程序运行,直到程序结束,或是下一个断点到来。ignore-count表示忽略其后的断点次数。

continue,c,fg三个命令都是一样的意思。

step

单步跟踪,如果有函数调用,他会进入该函数。进入函数的前提是,此函数被编译有debug信息。

很像VC等工具中的step in。后面可以加count也可以不加,不加表示一条条地执行,

加表示执行后面的count条指令,然后再停住。

next

同样单步跟踪,如果有函数调用,他不会进入该函数。很像VC等工具中的step over。

后面可以加count也可以不加,不加表示一条条地执行,加表示执行后面的count条指令,然后再停住。

set step-mode

set step-mode on

打开step-mode模式,于是,在进行单步跟踪时,程序不会因为没有debug信息而不停住。

这个参数很有利于查看机器码。

set step-mode off

关闭step-mode模式。

finish

运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。

until 或 u

当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。

stepi 或 si

nexti 或 ni

单步跟踪一条机器指令!一条程序代码有可能由数条机器指令完成,

stepi和nexti可以单步执行机器指令。

与之一样有相同功能的命令是 “display/i $pc” ,

当运行完这个命令后,

单步跟踪会在打出程序代码的同时打出机器指令(也就是汇编代码)

查看当前MYSQLD进程号 和客户端进程

[root

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值