使用GDB调试多线程实例详解
先写一段多线程程序。
makefile
加上 -g参数生成可调式信息, 可以进行调试。
pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败。在gcc编译的时候,附加要加 -lpthread参数即可解决。
gdb test 进入调试
需要调试的地方打下断点,run运行到断点处。
r 运行到断点处,info thread可以查看被调试的线程。
thread apply all bt 让所有线程打印堆栈信息
set scheduler-locking off|on|step
在使用step或continue命令调试当前被调试线程的时候,其他线程也是同时执行的,如果我们只想要被调试的线程执行,而其他线程停止等待,那就要锁定要调试的线程,只让它运行。
off:不锁定任何线程,所有线程都执行。
on:只有当前被调试的线程会执行。
step:阻止其他线程在当前线程单步调试的时候抢占当前线程。只有当next、continue、util以及finish的时候,其他线程才会获得重新运行的。
show scheduler-locking:
这条命令是为了查看当前锁定线程的模式。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
基于c语言中调试工具的用法汇总(不包含gdb)
是不是只有编译的时候才知道程序写了错误?有没有在未编译的时候就让机器帮你检查错误的工具呢?答案是:有!! splint工具.用一个最简单的HELLO WORLD来表述:===================================== 复制代码 代码如下: /*错误很明显*/#include <stdio.h> int main(void){ print("hello world\n", s); return} -----------------------
-
gdb调试命令的使用及总结
1.基本命令 1)进入GDB #gdb test test是要调试的程序,由gcc test.c -g -o test生成.进入后提示符变为(gdb) . 2)查看源码 (gdb) l 源码会进行行号提示. 如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码.或者:使用断点或单步运行,到某个函数处使用s进入这个函数. 3)设置断点 (gdb) b 6 这样会在运行到源码第6行时停止,可以查看变量的值.堆栈情况等:这个行号是gdb的行号. 4)查看断点
-
基于Linux调试工具strace与gdb的常用命令总结
strace和gdb是Linux环境下的两个常用调试工具,这里是个人在使用过程中对这两个工具常用参数的总结,留作日后查看使用.strace调试工具strace工具用于跟踪进程执行时的系统调用和所接收的信号,包括参数.返回值.执行时间.在Linux中,用户程序要访问系统设备,必须由用户态切换到内核态,这是通过系统调用发起并完成的.strace常用参数:-c 统计每种系统调用执行的时间.调用次数.出错次数,程序退出时给出报告-p pid 跟踪指定的进程,可以使用多个-p同时跟踪多个进程-o file
-
使用GDB调试多线程实例详解
先写一段多线程程序. makefile 加上 -g参数生成可调式信息, 可以进行调试. pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败.在gcc编译的时候,附加要加 -lpthread参数即可解决. gdb test 进入调试 需要调试的地方打下断点,run运行到断点处. r 运行到断点处,info thread可以查看被调试的线程. thread apply all bt 让所有线程打印堆栈信息 set scheduler
-
Python 多线程实例详解
Python 多线程实例详解 多线程通常是新开一个后台线程去处理比较耗时的操作,Python做后台线程处理也是很简单的,今天从官方文档中找到了一个Demo. 实例代码: import threading, zipfile class AsyncZip(threading.Thread): def __init__(self, infile, outfile): threading.Thread.__init__(self) self.infile = infile self.outfile =
-
Java 多线程实例详解(三)
本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 public class ThreadTest { public static void main(String[] args) { Account account = new Account("123456", 1000); DrawMoneyRunnable drawMoneyRunnable = new DrawMoneyRunnable(account, 700); Thr
-
Java 多线程实例详解(二)
本文承接上一篇文章<Java多线程实例详解(一)>. 四.Java多线程的阻塞状态与线程控制 上文已经提到Java阻塞的几种具体类型.下面分别看下引起Java线程阻塞的主要方法. 1.join() join -- 让一个线程等待另一个线程完成才继续执行.如A线程线程执行体中调用B线程的join()方法,则A线程被阻塞,知道B线程执行完为止,A才能得以继续执行. public class ThreadTest { public static void main(String[] args) {
-
Spring Boot如何优雅的使用多线程实例详解
前言 本文带你快速了解@Async注解的用法,包括异步方法无返回值.有返回值,最后总结了@Async注解失效的几个坑. 在 SpringBoot 应用中,经常会遇到在一个接口中,同时做事情1,事情2,事情3,如果同步执行的话,则本次接口时间取决于事情1 2 3执行时间之和:如果三件事同时执行,则本次接口时间取决于事情1 2 3执行时间最长的那个,合理使用多线程,可以大大缩短接口时间.那么在 SpringBoot 应用中如何优雅的使用多线程呢? Don't bb, show me code. 快速
-
linux下的C\C++多进程多线程编程实例详解
linux下的C\C++多进程多线程编程实例详解 1.多进程编程 #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { pid_t child_pid; /* 创建一个子进程 */ child_pid = fork(); if(child_pid == 0) { printf("child pid\n"); exit(0); } else { print
-
JAVA多线程实现生产者消费者的实例详解
JAVA多线程实现生产者消费者的实例详解 下面的代码实现了生产者消费者的问题 Product.Java package consumerProducer; public class Product { private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } public Product(String id) { this.id=id; } publ
-
Java多线程ForkJoinPool实例详解
引言 java 7提供了另外一个很有用的线程池框架,Fork/Join框架 理论 Fork/Join框架主要有以下两个类组成. * ForkJoinPool 这个类实现了ExecutorService接口和工作窃取算法(Work-Stealing Algorithm).它管理工作者线程,并提供任务的状态信息,以及任务的执行信息 * ForkJoinTask 这个类是一个将在ForkJoinPool执行的任务的基类. Fork/Join框架提供了在一个任务里执行fork()和join()操作的机制
-
Java 多线程优先级实例详解
Java 多线程优先级实例详解 线程的优先级将该线程的重要性传递给调度器.尽管CPU处理现有线程集的顺序是不确定的,但是调度器将倾向于让优先权最高的线程先执行. 你可以用getPriority()来读取现有线程的优先级,并且在任何时刻都可以通过setPriority()来修改优先级. import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SimplePrio
-
Python 多线程的实例详解
Python 多线程的实例详解 一)线程基础 1.创建线程: thread模块提供了start_new_thread函数,用以创建线程.start_new_thread函数成功创建后还可以对其进行操作. 其函数原型: start_new_thread(function,atgs[,kwargs]) 其参数含义如下: function: 在线程中执行的函数名 args:元组形式的参数列表. kwargs: 可选参数,以字典的形式指定参数 方法一:通过使用thread模块中的函数创
随机推荐
- vue.js实现含搜索的多种复选框(附源码)
- SWT(JFace)体验之Icon任我变
- 110.iOS10新特性适配教程XCode8新特性解析
- PHP 验证码的实现代码
- oracle下加密存储过程的方法
- javascript字符串替换函数如何一次性全部替换掉
- nginx cache不缓存问题的原因与解决方案
- dedecms模版制作使用方法
- PHP中单引号与双引号的区别分析
- 使用PHP+AJAX让WordPress动态加载文章的教程
- 理解PHP中的stdClass类
- php 三维饼图的实现代码
- 一步步教你用Python实现2048小游戏
- java实现单链表、双向链表
- 万圣节是什么节日 2014万圣节是几月几日
- 谈谈JavaScript中function多重理解
- JQuery 获得绝对,相对位置的坐标方法
- Java构造器使用方法及注意事项
- 跟我学习javascript的函数调用和构造函数调用
- 服务器遭受arp欺骗的解决方法 原创