`
weiyinchao88
  • 浏览: 1234469 次
文章分类
社区版块
存档分类
最新评论

使用gdb调试多线程程序- -

 
阅读更多

gdb对于多线程程序的调试有如下的支持:

  • 线程产生通知:在产生新的线程时, gdb会给出提示信息

(gdb) r
Starting program: /root/thread
[New Thread 1073951360 (LWP 12900)]
[New Thread 1082342592 (LWP 12907)]---以下三个为新产生的线程
[New Thread 1090731072 (LWP 12908)]
[New Thread 1099119552 (LWP 12909)]

  • 查看线程:使用info threads可以查看运行的线程。

(gdb) info threads
4 Thread 1099119552 (LWP 12940) 0xffffe002 in ?? ()
3 Thread 1090731072 (LWP 12939) 0xffffe002 in ?? ()
2 Thread 1082342592 (LWP 12938) 0xffffe002 in ?? ()
* 1 Thread 1073951360 (LWP 12931) main (argc=1, argv=0xbfffda04) at thread.c:21
(gdb)

注意,行首的蓝色文字为gdb分配的线程号,对线程进行切换时,使用该该号码,而不是上文标出的绿色数字。

另外,行首的红色星号标识了当前活动的线程

  • 切换线程:使用 thread THREADNUMBER 进行切换,THREADNUMBER 为上文提到的线程号。下例显示将活动线程从 1 切换至 4。

(gdb) info threads
4 Thread 1099119552 (LWP 12940) 0xffffe002 in ?? ()
3 Thread 1090731072 (LWP 12939) 0xffffe002 in ?? ()
2 Thread 1082342592 (LWP 12938) 0xffffe002 in ?? ()
* 1 Thread 1073951360 (LWP 12931) main (argc=1, argv=0xbfffda04) at thread.c:21
(gdb) thread 4
[Switching to thread 4 (Thread 1099119552 (LWP 12940))]#0 0xffffe002 in ?? ()
(gdb) info threads
* 4 Thread 1099119552 (LWP 12940) 0xffffe002 in ?? ()
3 Thread 1090731072 (LWP 12939) 0xffffe002 in ?? ()
2 Thread 1082342592 (LWP 12938) 0xffffe002 in ?? ()
1 Thread 1073951360 (LWP 12931) main (argc=1, argv=0xbfffda04) at thread.c:21
(gdb)

以上即为使用gdb提供的对多线程进行调试的一些基本命令。另外,gdb也提供对线程的断点设置以及对指定或所有线程发布命令的命令。

初次接触gdb下多线程的调试,往往会忽视gdb中活动线程的概念。一般来讲,在使用gdb调试的时候,只有一个线程为活动线程,如果希望得到其他的线程的输出结果,必须使用thread命令切换至指定的线程,才能对该线程进行调试或观察输出结果。

分享到:
评论

相关推荐

    gdb调试多线程程序总结

    GDB 调试多线程程序总结 ...GDB 调试多线程程序是一种复杂的调试技术,需要掌握多线程调试的基本命令和 scheduler-locking 命令的使用方式。只有通过实践和练习,才能熟练掌握 GDB 的多线程调试技术。

    Debugging with GDB 用GDB调试多线程程序

    ### 使用GDB调试多线程程序 在Linux环境下,GDB(GNU调试器)是进行程序调试的强大工具,尤其在处理复杂多线程程序时,GDB提供了丰富的功能来帮助开发者定位和解决问题。本文将详细介绍如何利用GDB的特性来有效地...

    使用GDB调试多线程实例详解

    先写一段多线程程序。 makefile 加上 -g参数生成可调式信息, 可以进行调试。 pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败。在gcc编译的时候,...

    GDB调试多线程

    GDB提供了一些功能来协助我们追踪和理解多线程程序的行为: - **显示所有线程**:使用`info threads`命令,可以列出程序当前运行的所有线程,查看它们的状态和ID。 - **切换线程**:使用`thread <线程ID>`命令,...

    gdb调试和执行分离-示例程序

    但在复杂的多线程或多进程应用中,这样的操作方式可能会显得不够高效,这时就需要利用GDB的远程调试功能,将调试界面与执行环境分开。 在本示例中,"gdb调试和执行分离"意味着我们将GDB的控制台界面与实际运行程序...

    gdb调试器的用法-常用命令

    以上只是GDB众多功能的一部分,还有其他高级特性,如设置条件断点、回溯调用堆栈、查看内存、调试多线程程序等。熟练掌握这些基本命令,将大大提高你在Linux下调试C/C++程序的效率和准确性。在实际开发中,结合GDB的...

    gdb多线程调试

    通过以上步骤,我们可以有效地利用gdb的强大功能来调试多线程程序中的问题,确保程序的正确性和稳定性。 #### 五、总结 gdb作为一款功能强大的调试工具,为开发者提供了丰富的功能来调试多线程程序。通过熟练掌握...

    用GDB调试程序(整理有书签).pdf

    通过阅读这些教程,你可以了解如何有效地使用GDB解决实际问题,比如调试多线程程序、分析核心转储等复杂场景。 总结起来,GDB是Linux开发者的得力助手,熟练掌握GDB的使用不仅可以提高调试效率,还能提升解决问题的...

    gdb-6.0.rar_gdb_gdb-6_gdb-6.6

    4. **多线程调试**:GDB 6.0改进了对多线程程序的调试支持,能更有效地跟踪和控制各个线程。 5. **图形化界面**:虽然GDB主要基于命令行,但6.0版本开始支持像DDD和GDBMI这样的图形前端,提供了更友好的用户体验。 ...

    GDB多线程调试

    然而,对于基于pthread的多线程程序,GDB需要额外的支持。这部分功能实现在`linux-thread-db.c`中,通过调用libthread_db库来增强对pthread的调试能力。 特别的是,`multi-thread` target在设计上采用了独特的初始...

    GDB调试程序[陈皓]&GDB调试工具指南

    他可能会涵盖如何启动GDB、加载目标程序、设置断点、单步执行、查看和修改变量值、以及如何处理多线程和共享库的问题。此外,陈皓可能还会分享一些高级技巧,如使用GDB的Python扩展进行更复杂的调试任务,或者如何...

    多线程gdb调试思路说明

    本文将结合实际经验总结多线程调试的思路,提供给使用GDB调试多线程的同仁们一些有用的信息。 一、GDB多线程调试基本命令 在GDB中,多线程调试的基本命令主要包括以下几个: 1、info threads:显示当前可调试的...

    GDB.rar_GDB chm -CSDN_gdb_gdb beginner_gdb chm_gdb调试

    7. **调试多线程程序** - **切换线程**:`thread` 命令用于查看和切换当前调试的线程。 - **线程同步**:识别和调试线程间的同步问题,如死锁和竞态条件。 8. **GDB脚本和扩展** - **GDB脚本**:编写Python脚...

    GDB--gdb调试.pdf

    - **多进程与多线程调试**:GDB支持对包含多个进程或线程的复杂程序进行调试,使用相应的命令可以切换和控制不同进程或线程的状态。 ### 运行程序下的调试技巧 对于已经在运行的进程,GDB提供了特殊的方法进行调试...

    用GDB调试程序--对GDB介绍的比较详细。

    例如,它支持多种编程语言,可以调试多线程和多进程程序,还允许通过脚本自动化调试流程。GDB的命令行界面虽然没有图形化调试器直观,但对于一些复杂的调试任务,如远程调试、嵌入式系统调试等,GDB往往能提供更强大...

    gdb-6.6.tar.gz_gdb 6.6_gdb-6_gdb-6.6_gdb-6.6.tar.gz_linux gdb

    8. **多线程和多进程调试**:GDB 6.6支持调试多线程和多进程程序,可以分别控制每个线程或进程的执行。 9. **源码级调试**:如果源代码可用,GDB可以显示源代码,并将程序的执行与源代码行对应起来,方便阅读和理解...

    gdb的使用及原理---整理

    13. **调试多线程程序**: - `info threads`列出所有线程。 - 要切换调试线程,使用`thread id`命令。 - `set scheduler-locking on`防止其他线程执行。 - `thread apply ID1 ID2/all bt`查看指定线程或所有线程...

    qtcreator-gdb-7.2-mingw-x86

    3. **多线程调试**:GDB支持多线程调试,可以跟踪和控制每个线程的状态,这对于现代多线程应用程序的调试至关重要。 4. **动态加载库分析**:在调试过程中,GDB能显示应用程序加载的动态链接库,帮助识别依赖问题。...

    GDB 多线程调试基本命令

    ### GDB多线程调试基本命令详解 #### 一、引言 随着现代软件系统日益复杂,多线程编程已成为常态。为了确保程序的稳定性和性能,开发人员必须掌握...熟练掌握这些命令和技术,对于提高多线程程序的开发效率至关重要。

Global site tag (gtag.js) - Google Analytics