strace跟踪线程调用

方法一:
strace -fp pid , 可以跟踪所有线程, 进程的系统调用。

  1. [root@xxxx]strace -p 24091
  2. Process xxx attached - interrupt to quit
  3. [ Process PID=24091 runs in 32 bit mode. ]
  4. futex(0xc5bbbd8, FUTEX_WAIT, 24215 NULL

复制代码

你的问题不是strace不能跟踪,而是你的线程锁住了。 futex应该是内核里对pthread_mutex_lock实现的一个函数。

方法二(本质同方法一,但更明了):
pstree -p pid 可以查看多线程程序的进程树。
在针对各个线程,逐个的strace -p pid

最后
man pstack
pstack - print a stack trace of a running process
相当于gdb内的bt,打出栈信息。

时间: 2024-08-31 03:45:15

strace跟踪线程调用的相关文章

linux跟踪线程的方法:LWP和strace命令

摘要:在使用多线程程序时,有时会遇到程序功能异常的情况,而这种异常情况并不是每次都发生,很难模拟出来.这时就需要运用在程序运行时跟踪线程的手段,而linux系统的LWP和strace命令正是这种技术手段.本文对LWP和strace命令做了简明扼要的介绍,并通过一个实例来说明如何运用.总而言之,LWP和strace的使用可以提高多线程程序的可维护性. 问题描述: 我们来看一个问题:程序tcp_client同时创建多个线程向同一个服务器发送数据,每个线程发送不同类型的数据,服务器接收数据后,可以通过

.Net 下跟踪线程挂起和程序死循环

.Net 下调试跟踪线程挂起和程序死循环 作者:Eaglet .Net 下的程序调试相对C/C++要简单很多,少了那些令人头疼的指针越界的问题.不过当你的程序遇到如下问题时,依然非常棘手: 1. 进程异常终止.解决方案见 .Net 下未捕获异常的处理 2. 内存泄漏或者内存申请后程序始终没有释放.解决方案见 用 .NET Memory Profiler 跟踪.net 应用内存使用情况--基本应用篇 .如果通过自己编写的程序监控,我将在以后的文章中阐述. 3. 线程因未知原因挂起,比如死锁. 4.

艾伟:.Net 下跟踪线程挂起和程序死循环

.Net 下调试跟踪线程挂起和程序死循环 作者:Eaglet      .Net 下的程序调试相对C/C++要简单很多,少了那些令人头疼的指针越界的问题.不过当你的程序遇到如下问题时,依然非常棘手:      1. 进程异常终止.解决方案见 .Net 下未捕获异常的处理      2. 内存泄漏或者内存申请后程序始终没有释放.解决方案见 用 .NET Memory Profiler 跟踪.net 应用内存使用情况--基本应用篇 .如果通过自己编写的程序监控,我将在以后的文章中阐述.      3

新人一枚,请问怎样从B线程调用A线程的内容?

问题描述 新人一枚,请问怎样从B线程调用A线程的内容? 具体要求:写一个线程A,得到0-10的随机数,再写一个线程B来了调用线程A!!!!! 解决方案 int a;//全局变量,如果多个线程同步访问需要加锁 A...//线程A B...//线程B 代码结构大致如上,访问的时候,因为变量a是全局数据,所以在线程A和B中都可以直接访问,就好像C中的任何函数都可以访问和使用全局变量一样 解决方案二: 放是全局变量来交换数据

借助封装类实现线程调用带参方法

(一).描述      由于线程只能执行无参数方法. 有时候需要线程执行"带参数方法"      此示例演示怎样借助封装类实现"线程调用带参方法"(二).代码 本示例代码已经测试,能够正常运行! (三).示例下载  http://www.cnblogs.com/Files/ChengKing/ThreadExample.rar using System;using System.Threading; namespace 借助封装类实现_线程调用带参方法_{ clas

windows跨线程调用控件的方法

用户不喜欢反应慢的程序.在执行耗时较长的操作时,使用多线程是明智之举,它可以提高程序 UI 的响应速度,使得一切运行显得更为快速.在Windows 中进行多线程编程曾经是 C++ 开发人员的专属特权,但是现在,可以使用所有兼容 Microsoft .NET 的语言来编写. 不过Windows 窗体体系结构对线程使用制定了严格的规则.如果只是编写单线程应用程序,则没必要知道这些规则,这是因为单线程的代码不可能违反这些规则.然而,一旦采用多线程,就需要理解 Windows 窗体中最重要的一条线程规则

多线程-C#创建线程调用方法参数出错

问题描述 C#创建线程调用方法参数出错 我想创建几个线程来熟悉多线程的一些知识于是写了一个小程序 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;namespace 多线程试验{ class Program { static void Main(string[] args) {

在c#中关于线程调用控件

由于c#不允许非创造控件线程调用控件,所以遇到过很多问题. 提示: 线程间操作无效: 从不是创建控件"showtable_btn"的线程访问它. 有些小郁闷 因为是刚刚使用thread 原始代码大概如下 private void showtable_btn_Click(object sender, EventArgs e) { thread t = new thead(s) t.start() }   private void s() { textbox1.text = "w

C#线程调用带参数的方法

在 .NET Framework 2.0 版中,要实现线程调用带参数的方法有两种办法. 第一种:使用ParameterizedThreadStart. 调用 System.Threading.Thread.Start(System.Object) 重载方法时将包含数据的对象传递给线程. 使用 ParameterizedThreadStart 委托不是传递数据的类型安全的方法,因为 System.Threading.Thread.Start(System.Object) 方法重载接受任何对象. 这