C语言gdb调试之精髓 | gdb调试多线程

C语言gdb调试之精髓(常用命令、多进程、多线程、程序日志)

起语:

版权声明:
C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

来源:C语言技术网(www.freecplus.net)

作者:码农有道

如果文章有错别字,或者内容有错误,或其他的建议和意见,请您联系我们指正,非常感谢!!!


我只是用来方便学习 && 复习!!! 我只是一个学习者, 内功有限, 大家看到谨慎参考!!!
在这里插入图片描述

C语言gdb调试之精髓 | gdb调试多线程

示例代码
在这里插入图片描述

#include 
#include 
#include 

int x = 0, y = 0; //x用于线程一, y用于线程二.

pthread_t pthid1, pthid2;

//第一个线程的主函数
void *pth1_main(void *arg);

//第二个线程的主函数
void *pth2_main(void *arg);

int main()
{
     
    //创建线程一
    if ( pthread_create(&pthid1, NULL, pth1_main, (void*)0) != 0 )
    {
     
        printf("pthread_create pthid1 failed. \n"); return -1;
    }

    //创建线程二
    if ( pthread_create(&pthid2, NULL, pth2_main, (void*)0) != 0 )
    {
     
        printf("pthread_create pthid2 failed. \n"); return -1;
    }

    printf("111\n");
    pthread_join(pthid1, NULL);

    printf("222\n");
    pthread_join(pthid2, NULL);

    printf("333\n");

    return 0;
}

void *pth1_main(void *arg)
{
     
    for (x = 0; x < 100; x++)
    {
     
        printf("x=%d\n", x);
        sleep(1);
    }

    pthread_exit(NULL); //终止调用线程
}

void *pth2_main(void *arg)
{
     
    for (y = 0; y < 100; y++)
    {
     
        printf("y=%d\n", y);
        sleep(1);
    }

    pthread_exit(NULL); //终止调用线程
}

在shell中执行:

查看当前运行的进程: ps aux | grep book(要查看的执行文件)
查看当前运行的轻量级进程: ps -aL | grep book (要查看的执行文件)
查看主线程和新线程的关系: pstree -p主线程id

在gdb中执行:

查看线程: info threads
切换线程: thread 线程id
只运行当前线程: set scheduler-locking on
运行全部的线程: set scheduler-locking off
指定某线程执行某gdb命令: thread apply线程id cmd
全部的线程执行某gdb命令: thread apply all cmd

具体操作

C语言gdb调试之精髓 | gdb调试多线程_第1张图片
在这里插入图片描述
查看当前运行的进程
C语言gdb调试之精髓 | gdb调试多线程_第2张图片
info b #查看断点
C语言gdb调试之精髓 | gdb调试多线程_第3张图片
#指定某线程执行某gdb命令
C语言gdb调试之精髓 | gdb调试多线程_第4张图片

我觉得和多进程差不多.
目前没有用上, 用上再复习(查资料)吧!!!

视频来源:
在这里插入图片描述

结语:

时间: 2020-09-03

你可能感兴趣的:(多进程,多线程,程序日志),多线程,linux,c语言,gdb)