• gdb调试知识积累——真·详解


    1、info threads

    命令功能:查看程序的线程数量及其详细信息

    2、sudo gdb attach 进程号

    该命令可以调试目标进程号的程序。常用于多线程程序卡死了,但是不知道卡在了哪里。此时,使用该命令进入gdb,然后再使用1、中的命令查看线程信息,就能够分析个大概了。

    注意使用这个命令的时机。得是程序已经运行起来了,然后你再用这个命令 突然杀进去调试。其实这都是废话,程序不运行起来哪里来的进程号??(注:使用ps -u命令查看进程号)

    第一次见到这个调试方法(指sudo gdb attach 进程号+info threads)是在写微型聊天室项目的时候。当时客户端程序卡死在一个地方,我自己用cout输出打法,试了好长时间,才大致明白问题出在哪了。然后教程上讲了这个方法。其实,本文的1、到4、全都是从这个例子里认识到的。

    3、bt

    命令功能:列出当前线程的调用堆栈。

    什么是线程的调用堆栈?我发现很多博客都写个打印调用堆栈,那啥是调用堆栈,都不解释一下,这和没写有啥区别?

    调用堆栈就是把程序里面函数的调用顺序 列成一个表,最后被调用的函数出现在最上方。bt命令就是列出了这样一张表,表的第一列就是当前线程最后调用的函数。

    用该命令可以一下就找到程序卡死的位置。

    记一篇文章,对bt列出的调用堆栈进行了深入剖析:https://blog.csdn.net/zhg598242449/article/details/7591123

    4、thread Id

    命令功能:切换想要调试的线程。通常在调试多线程程序时使用。

    这里的Id是1、中命令显示的Id并不是系统中真正的线程id,如下图所示:
    在这里插入图片描述注意红框中打了 * 的线程,表示该线程是当前正在调试的线程。使用thread 2命令切换线程后,打 * 的线程也变成了Id为2的线程。

    (还遇到啥比较好用的命令,再接着补充)

  • 相关阅读:
    【ScrollView】Android ScrollView无法滚动到底部
    私有继承和虚函数私有化能用么?
    昂首资本通过套期保值,MT4和MT5这样选
    二叉树:dfs+回溯
    Junit4 一直处于运行中的排查过程
    python3+requests+unittest实战详解(一)
    认知升级:成功需要掌握的思维模型
    4795: 【PY】【C1】【分支】寄快递
    2023年9月14日
    运动装备有哪些?2022年值得买的运动装备分享
  • 原文地址:https://blog.csdn.net/m0_51551385/article/details/127442664