多线程调试(gdb命令行和使用集成开发qtcreator查看线程状态)

原创 2018年04月17日 10:40:11

  我在qtcreator中用调用的gdb找不到如何显示线程号对应的线程名字,因此需要继续学习使用gdb进行多线程调试.
1.创建多线程工程
2.启动进程并查看运行进程对应的id
3.使用gdb连接进程,并查看进程

1.gdb命令行调试  

1.创建多线程工程

函数希望实现的功能为隔2s打印一次hello,1s打印一次world.但是,当使用 unique_lock

#include <iostream>
#include<thread>
#include<unistd.h>
#include<mutex>
using namespace std;
std::mutex mymutex;
class Hello{
public:
    Hello();
    ~Hello();
void  RunSayHello();
};
Hello::Hello(){

}
void Hello::RunSayHello()
{
    while(1)
    {
//        {
//            unique_lock<mutex> lock(mymutex);
//        }
        unique_lock<mutex> lock(mymutex);
        cout<<endl<<"hello"<<endl;
        sleep(1);
    }
}

class World{
public:
    World();
    ~World();
void  RunSayWorld();
};
World::World(){

};
void World::RunSayWorld()
{
    while(1)
    {
//        {
//            unique_lock<mutex> lock(mymutex);
//        }
         unique_lock<mutex> lock(mymutex);
         cout<<endl<<"world"<<endl;
         sleep(1.5);
    }
}

int main()
{
    Hello* hello=new Hello();
    World* world=new World();

     thread threadHello(&Hello::RunSayHello,hello);
     thread threadWorld(&World::RunSayWorld,world);
     threadHello.join();
     threadWorld.join();
   return 0;
}

注意编译的时候加上-g表示为debug模式
CMakeLists.txt

project(threaddebugtest)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -Wall -std=c++11 -pthread -g -march=native")
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

#2.用gdb查看线程状态

编译后进入到可执行文件文件夹,运行程序.调试的目的是查看每个线程的状态.
进程名字为threaddebugtest
调试步骤:
(1)启动进程 ./threaddebugtest
(2)查看进程id

ps -aux |grep threaddebugtest

这里写图片描述
id号为左上的23355
(3)进入gdb连接进程
新建终端输入

gdb

输入attach +进程id

attach 23355

这里写图片描述
表示连接成功
(4)查看当前进程的线程信息

(gdb) info thread

这里写图片描述
发现线程2_ _ lll_lock_wait(),说明线程2在等待释放锁
发现线程1 最后输出为pthread_join,说明主函数在等待线程结束
发现线程3 nanosleep(),说明此时线程3在执行sleep()

2.qtcreator查看线程状态

没想到集成开发环境这么方便,只需要注意两点就行

1.选上Threads
Window->Views->Threads
勾上
2.选上SnapShots
Window->Views->SnapShots
勾上
3.运行程序,在Threads状态栏双击对应的线程,表示选定某个线程
4.在SnapShots状态栏双击,可以看到当前线程的状态,会自动跳转该线程运行到那个地方
直接上图
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ktigerhero3/article/details/79971331

利用GDB调试多线程core文件

在linux下程序崩溃时,一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的,接下来我们通过一个案例观察怎么利用GDB调试core文件。在命令...
  • shaomingliang499
  • shaomingliang499
  • 2016-01-18 15:03:01
  • 646

GDB多线程调试的基本命令。

info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换当前调试的线程为...
  • sunweixiang1002
  • sunweixiang1002
  • 2016-11-11 13:15:37
  • 1879

菜鸟学习C++-使用GDB调试多线程死锁

多线程是C++中经常使用的技术。多线程经常访问共享资源,这时候就可能需要线程同步技术。如果对共享资源有访问顺序,操作不当的话就很容易产生死锁。在本节,笔者就和大家一起看看在linux机器上怎么调试多线...
  • zhangfengaiwuyan
  • zhangfengaiwuyan
  • 2013-12-09 00:25:55
  • 2738

QtCreator调试设置(CDB调试设置)

在使用qtcreator时整个ide使用感觉还是很不错的,尤其是调试的快捷键和vs是一致的的,但是在windows平台上gdb调试器表现确实不是十分好,所以决定使用 一下微软的调试器,qtcreato...
  • liangjiapei
  • liangjiapei
  • 2016-01-12 11:12:32
  • 4262

linux gdb-多线程调试

linux下应用程序的调试工具主要就是gdb,可能你已经习惯了IDE形式的调试工具。也许刚开始使用gdb作为调试工具,会有诸多的不变,但是一旦你学会了如何使用gdb你就会被其富有魔力的功能所吸引的,下...
  • linux_embedded
  • linux_embedded
  • 2013-05-05 21:18:07
  • 9666

gdb常用调试命令以及多线程堆栈的查看

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC...
  • NK_test
  • NK_test
  • 2016-03-03 23:32:53
  • 18142

GDB常用调试命令以及多进程多线程调试

今天把所有的GDB常用的调试命令都过了一遍,尤其是多线程调试。所以先做个总结,以免忘记。以后如果有新的有用的命令会继续追加。 一:普通命令 1.list命令 list  linenum    ...
  • FreeeLinux
  • FreeeLinux
  • 2016-12-17 11:07:25
  • 3710

让QtCreator在调试时显示字符串 Qt调试助手 QtDebuggingHelper qtc-debugging-helper

When starting gdb with application message “Debugging Helper Missing” is displayed [Solved] http://q...
  • wwwwws
  • wwwwws
  • 2014-02-16 12:07:21
  • 4757

使用gdb调试死锁线程

1.调试文件 lock.c #include #include #include void *work_thread(void *arg) { pthread_mutex_t mutex;...
  • atinybirdinit
  • atinybirdinit
  • 2014-11-27 18:04:54
  • 6192

用Qt 调用GDB调试 Arm程序 详细步骤----可单步执行每一行

前言 本人交叉编译环境 Ubuntu 10.04(虚拟机),编译工具链 arm-hisiv100nptl-linux,Qt 4.8.5 ,QtCreator1.3.1 1、在虚拟机Ubuntu...
  • USB_ABC
  • USB_ABC
  • 2016-06-10 16:30:57
  • 3428
收藏助手
不良信息举报
您举报文章:多线程调试(gdb命令行和使用集成开发qtcreator查看线程状态)
举报原因:
原因补充:

(最多只允许输入30个字)