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

起语:

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

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

作者:码农有道

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


我只是用来方便学习 && 复习!!! 我只是一个学习者, 内功有限, 大家看到谨慎参考!!!

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

示例代码

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>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

具体操作



查看当前运行的进程

info b #查看断点

#指定某线程执行某gdb命令

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

视频来源:

结语:

时间: 2020-09-03

C语言gdb调试之精髓 | gdb调试多线程相关推荐

  1. Linux系统gdb工具使用,使用 GDB 工具调试 Go

    排除应用程序故障是比较复杂的,特别是处理像 Go 这样的高并发语言.它更容易在具体位置使用 print 打印语句来确定程序状态,但是这个方法很难根据条件发展去动态响应你的代码. 调试器提供了一个强大得 ...

  2. GDB调试命令以及GDB调试段错误

    一.GDB的调试命令. C语言是:cc -g tst.c -o tst;C++是g++  -g -o (生成的文件) file.cpp C++调试程序命令:gdb  file 启动,罗列代码行数ist ...

  3. gdb 的用法(Linux调试器)

    在Linux应用程序开发中,最常用的调试器是gdb,它可以在程序中设置断点.查看变量值.一步一步跟踪程序的执行过程. GDB(GNU symbolic debugger)简单地说就是一个调试工具.它是 ...

  4. linux gdb 运行的程序,GDB(十)--调试正在运行的进程

    我编写了一个循环: long i; for (i = 0; i < 999999; i++) { mt.a += 1; sleep(1); } 把它编译成a.out,并在后台执行它:./a.ou ...

  5. gdb查看空指针 linux_5 个鲜为人知 GNU 调试器(GDB)技巧

    了解如何使用 gdb 的一些鲜为人知的功能来检查和修复代码.-- Tim Waugh(作者) GNU 调试器 (gdb)是一种宝贵的工具,可用于在开发程序时检查正在运行的进程并解决问题. 你可以在特定 ...

  6. 【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧

    上一篇文章学习了如何使用GDB进行函数调用栈的查看:[软件开发底层知识修炼]十六 快速学习GDB调试四 使用GDB进行函数调用栈的查看 本篇文章是GDB调试快速学习系列的最后一篇.将综合前几篇文章做一 ...

  7. 【软件开发底层知识修炼】十七 快速学习GDB调试四 使用GDB进行函数调用栈的查看

    上一篇文章学习了如何使用GDB数据断点进行内存监测:[软件开发底层知识修炼]十五 快速学习GDB调试三 使用GDB的数据断点监测变量是否改变 本篇文章继续上一篇文章的学习:如何使用GDB进行函数调用栈 ...

  8. 【软件开发底层知识修炼】十六 快速学习GDB调试三 使用GDB的数据断点监测变量是否改变

    上一篇文章我们学习了如何使用GDB进行软件断点调试和硬件断点调试:[软件开发底层知识修炼]十五 快速学习GDB调试二 使用GDB进行断点调试 本篇文章继续上一篇文章的学习,如何使用GDB的数据断点监测 ...

  9. 【软件开发底层知识修炼】十五 快速学习GDB调试二 使用GDB进行断点调试

    上一篇文章我们学习了使用GDB的最基本方法:[软件开发底层知识修炼]十四 快速学习GDB调试一 入门使用 本篇文章将学习GDB的断点调试.断点调试是一种非常重要的调试方法. 文章目录 1 断点类型 2 ...

最新文章

  1. MYSQL从节点延迟问题原因及解决
  2. POJ2262Goldbach's Conjecture 简单的素数判定
  3. What day is that day?(快速幂,打表找周期,或者求通项公式)
  4. 十九、PHP框架Laravel学习笔记——批量赋值和软删除
  5. Golang笔记—封装/继承/接口
  6. mysql-8.0.16-winx64.zip安装教程
  7. NetCore Get Parameter
  8. STM(Software Transactional Memory Systems)是什么 怎么用
  9. 机器学习基础:台大李宏毅的线性代数视频公开课
  10. 可微分神经计算机DNC
  11. JavaScript Window窗口对象
  12. win gvim erlang 环境配置
  13. h5活动是什么意思_H5活动页能给你带来什么?
  14. WFP过滤开发(一)
  15. Python3通过chmod修改目录或文件权限
  16. html css 基本词汇
  17. JS引入方式有哪些?
  18. MySQL基本数据类型与Java基本数据类型
  19. 262. Trips and Users - 行程和用户 <Hard>
  20. 【PaddleNLP学习】PaddleNLP笔记

热门文章

  1. HTML5+CSS3小实例:炫彩的流光按钮
  2. Inventor(C#)开发学习小结——入门篇
  3. 一键装机linux_linux系统学习第十八天《搭建一键装机平台》终结篇-阿里云开发者社区...
  4. 两段文章清楚弄明白什么是异步IO、同步IO、同步阻塞IO、同步非阻塞IO、异步阻塞IO、异步非阻塞IO
  5. js实现百度换肤效果
  6. android MediaPlayer 完成播放后无法再次播放
  7. GIT(分布式版本控制系统)入门
  8. 函数的callee和caller的区别和用处
  9. 系统分析师论文5:论软件的系统测试及其应用
  10. R语言double数据转成numeric类型