赞
踩
之前已经写过一篇博客《Linux下使用gdb调试C/C++程序》,是一些简单的用法,今天的这一篇可以算是进阶篇。
一、关于多线程的使用命令
1、thread
查看当前线程的ID,这ID是GDB对线程的编号,从1开始的。以下所说的线程ID,都是这种ID。
2、info thread
查看当前可以被调试的线程,ID前面有*号的表示GDB当前所在的线程。
3、info threads
查看所有的线程
4、thread thread_number
GDB切换到线程ID为number的线程
5、thread apply thread_number command
针对某一个线程执行GDB命令,例如 thread apply 5 c ,只针对线程ID为5的线程执行continue命令,在多线程调试中,由于一个断点,
会在多个线程中停住,但是有时候,只想观察某一个线程,就得采用这样的做法。
扩展:thread apply all bt ,查看所有线程的调用栈。all 表示所有线程。
5、set scheduler-locking on/off
可理解为GDB的线程调度锁,与4中的功能类似,当为on时,表示打开锁,GDB只在当前线程执行,不会切换到其他线程。
为off,则关闭锁。
二、关于GDB启动的使用命令
1、gdb -p process_id
调试一个正在运行的进程,有时候要调试一个fork出来的子进程,它正在运行,必须这样的做才行。
process_id是进程ID,通过ps -aux或者pidof相关命令得到。
扩展:直接启动GDB,执行 attach process_id 也可以有一样的效果。
2、gdb --args ./test.exe 100
有时候程序启动需要传入参数,因此gdb 后面必须跟--args选项。因此这个命令表示用GDB启动test.exe程序,该程序传入参数100。
扩展:另一种做法:1、gdb ./test.exe 2. set args 100 3、run
三、其他命令
1、set var number=3
number是一个整型变量,设定它的值为3,即修改变量的值。
2、b 15 if number==5
设置条件断点,如果number等于5,将在15行停住。当然行号也可以函数名。
3、set print element 0
在用p命令打印string类型时,若字符串比较长,比如大概超过400字节,就只打印出一部分,这个命令,可以突破此限制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。