蛋蛋28群  |  最近更新  |  tag  | 
手机版
蛋蛋28群
当前位置:首页 > linux下断点

linux下断点

来源:互联网 时间:2017-06-15 阅读: 手机版

篇一:linux下断点

另外,还有一个tcatch event ,功能类似,不过他只设置一次捕捉点,当程序停住以后,应点被自动删除。

捕捉点信息的查看方式和代码断点的命令是一样的,这里就不多介绍了。

在特定线程中中断

你可以定义你的断点是否在所有的线程上,或是在某个特定的线程。gdb很容易帮你完成这一工作。

break linespec thread threadno break linespec thread threadno if ...

linespec指定了断点设置在的源程序的行号。threadno指定了线程的id,注意,这个id是gdb分配的,你可以通过"info threads"命令来查看正在运行程序中的线程信息。如果你不指定thread threadno 则表示你的断点设在所有线程上面。你还可以为某线程指定断点条件。如:

  (gdb) break frik.c:13 thread 28 if bartab lim

当你的程序被gdb停住时,所有的运行线程都会被停住。这方便你你查看运行程序的总体情况。而在你恢复程序运行时,所有的线程也会被恢复运行。那怕是主进程在被单步调试时。

恢复程序运行和单步调试

在gdb中,和调试步进相关的命令主要有如下几条:

篇二:linux下断点

图片如下:

5 、 运行并且跳转到断点

1、运行

start

2 、跳转到断点命令(countine 简写c)

c

程序就到到 b 这行来,上面2个步骤也可以用这个run (简写 r)命令代码

r

我们这里代码会跳到这个断点里面来,我么就避免了手动循环这么多次,因为这个断点会打很多次,所以我们可以用c命令,还是会在这行,所以打断点一般不要打在循环里面,当这个代码执行完之后,我们再用c命令,就会打印18行的代码

我们也可以用watch命令来观察变量,如果变量的 发生变化,程序就会停止

watch b

我么看变量的 或则单个变量的 可以用下面命令

i localsp c

进入函数内部用下面命令

s

单步调试往下执行用下面命令

n

删除断点

delete 行号

退出gdb命令

quit4、如何保存断点

有时候运行时,上次打的断点没了,怎么保存呢?

1、查看断点信息并保存

info b

2 、保存断点

save breakpoint fig.dp

断点保存在fig.dp文件里面

3、调试时候读取保存断点文件

gdb hello2 -x fig.dp

要记住加上参数 -x

然后再去查看是否有断点

info b

可以看到是有2个断点的

  学会了gdb打断点的基本命令,还有一些调试手段,以及断点的保存。

篇三:linux下断点

启动gdb后,首先就是要设置断点,程序中断后才能调试。在gdb中,断点通常有三种形式:

断点(breakpoint):

在代码的指定位置中断,这个是我们用得最多的一种。设置断点的命令是break,它通常有如下方式:

break function 在进入指定函数时停住break linenum 在指定行号停住。break +/-offset 在当前行号的前面或后面的offset行停住。offiset为自然数。break filename:linenum 在源文件filename的linenum行处停住。break ... if condition ...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。

可以通过info breakpoints [n]命令查看当前断点信息。此外,还有如下几个配套的常用命令:

delete 删除所有断点delete breakpoint [n] 删除某个断点disable breakpoint [n] 禁用某个断点enable breakpoint [n] 使能某个断点

观察点(watchpoint):

在变量读、写或变化时中断,这类方式常用来定位bug。

watch expr 变量发生变化时中断rwatch expr 变量被读时中断awatch expr 变量值被读或被写时中断

可以通过info watchpoints [n]命令查看当前观察点信息

捕捉点(catchpoint):

捕捉点用来补捉程序运行时的一些事件。如:载入共享库(动态链接库)、c++的异常等。通常也是用来定位bug。

捕捉点的命令格式是:catch ,event可以是下面的内容

throw c++抛出的异常时中断catch c++捕捉到的异常时中断exec 调用系统调用exec时(只在某些操作系统下有用)fork 调用系统调用fork时(只在某些操作系统下有用)vfork 调用系统调用vfork时(只在某些操作系统下有用)load 或 load libname 载入共享库时(只在某些操作系统下有用)unload 或 unload libname 卸载共享库时(只在某些操作系统下有用)

另外,还有一个tcatch ,功能类似,不过他只设置一次捕捉点,当程序停住以后,应点被自动删除。

捕捉点信息的查看方式和代码断点的命令是一样的,这里就不多介绍了。

在特定线程中中断

你可以定义你的断点是否在所有的线程上,或是在某个特定的线程。gdb很容易帮你完成这一工作。

break linespec thread threadno break linespec thread threadno if ...

linespec指定了断点设置在的源程序的行号。threadno指定了线程的id,注意,这个id是gdb分配的,你可以通过”info threads”命令来查看正在运行程序中的线程信息。如果你不指定thread 则表示你的断点设在所有线程上面。你还可以为某线程指定断点条件。如:

(gdb) break frik.c:13 thread 28 if bartab lim

当你的程序被gdb停住时,所有的运行线程都会被停住。这方便你你查看运行程序的总体情况。而在你恢复程序运行时,所有的线程也会被恢复运行。那怕是主进程在被单步调试时。

恢复程序运行和单步调试

在gdb中,和调试步进相关的命令主要有如下几条:

continue 继续运行程序直到下一个断点(类似于vs里的f5)next 逐过程步进,不会进入子函数(类似vs里的f10)setp 逐语句步进,会进入子函数(类似vs里的f11)until 运行至当前语句块结束finish 运行至函数结束并跳出,并打印函数的返回值(类似vs的shift+f11)

ps:这些命令大部分可以简写为第一个字母,在日常使用过程中,往往只会输入第一个字符即可执行该命令,我标红的即是通常的使用方式。这几条命令使用非常频繁,并且可以带一些附加参数以实现高级功能,需要熟练掌握。

猜你喜欢

最新文章

热门文章