gdb调试命令总结
2016-06-09 18:56
429 查看
之前已经写过一篇博客《Linux下使用gdb调试C/C++程序》,是一些简单的用法,今天的这一篇可以算是进阶篇。
一、关于多线程的使用命令
1、thread
查看当前线程的ID,这ID是GDB对线程的编号,从1开始的。以下所说的线程ID,都是这种ID。
2、info thread
查看当前可以被调试的线程,ID前面有*号的表示GDB当前所在的线程。
3、thread thread_number
GDB切换到线程ID为number的线程
4、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字节,就只打印出一部分,这个命令,可以突破此限制。
一、关于多线程的使用命令
1、thread
查看当前线程的ID,这ID是GDB对线程的编号,从1开始的。以下所说的线程ID,都是这种ID。
2、info thread
查看当前可以被调试的线程,ID前面有*号的表示GDB当前所在的线程。
3、thread thread_number
GDB切换到线程ID为number的线程
4、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字节,就只打印出一部分,这个命令,可以突破此限制。
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- Linux 自检和 SystemTap
- Python 七步捉虫法
- C#实现多线程的同步方法实例分析
- 路由器的配置与调试
- 对于技术人员的出现了运行时间错误,是否要进行调试的解决方法
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- 解析C#多线程编程中异步多线程的实现及线程池的使用
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- 分享我在工作中遇到的多线程下导致RCW无法释放的问题
- C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法
- C#控制台下测试多线程的方法