借助gdb实现pstack】的更多相关文章

pstack.sh: #! /bin/sh if [ -z $1 ] then echo "gdb script for print stack" echo "usage: $0 pid" exit fi gdb --batch --quiet -x cmds -p $1 cmds: echo /nProcess:/n info proc echo /nStack: thread apply all backtrace detach quit…
pstack竟然是一个shell脚本,核心是调用gdb的thread apply all bt查看进程的所有线程的堆栈,之后用sed正则展示线程堆栈信息. /proc/pid/exe是一个指向可执行文件的软连接. #!/bin/sh if test $# -ne 1; then     echo "Usage: `basename $0 .sh` <process-id>" 1>&2     exit 1 fi if test ! -r /proc/$1; t…
1) 如何使用strace+pstack利器分析程序性能? http://www.cnblogs.com/bangerlee/archive/2012/04/30/2476190.html 此文有详细介绍怎么用strace和pstack 2) Linux下多线程查看工具(pstree.ps.pstack)? http://blog.csdn.net/yfkiss/article/details/6729364 3) 使用strace,lstrace,truss来跟踪程序的运行过程 http://…
gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于7.0,之前使用过gdb6.3调试多线程是不行的. 从上图可以看出两个线程都阻塞在wait上,而且还给出了在哪一行代码中,很容易就定位到产生死锁的位置. 有时候线程太多,想写到文件里,可以: (gdb)set logging file <文件名> (gdb)set logging on (gdb)…
前言 上篇<GDB调试指南-启动调试>我们讲到了GDB启动调试的多种方式,分别应用于多种场景.今天我们来介绍一下断点设置的多种方式. 为何要设置断点 在介绍之前,我们首先需要了解,为什么需要设置断点.我们在指定位置设置断点之后,程序运行到该位置将会“暂停”,这个时候我们就可以对程序进行更多的操作,比如查看变量内容,堆栈情况等等,以帮助我们调试程序. 查看已设置的断点 在学习断点设置之前,我们可以使用info breakpoints查看已设置断点: info breakpointsNum    …
什么是GDB: GDB应用: 静态分析工具与动态分析工具: GDB启动方式: GDB启动之后会有一个交互式的命令行,可以输入GDB特定的命令让GDB去工作. gdb test.out意思是这一次gdb启动关注的是test.out这个进程. gdb test.out core意思是程序崩溃时产生core文件. 动态连接: gdb test.out pid意思是gdb去跟踪test.out这个程序文件对应的进程号为pid的进程. 应用示例一: 应用示例二: 实验: test.c程序如下: #incl…
gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于7.0,之前使用过gdb6.3调试多线程是不行的. 从上图可以看出两个线程都阻塞在wait上,而且还给出了在哪一行代码中,很容易就定位到产生死锁的位置. 有时候线程太多,想写到文件里,可以: (gdb)set logging file <文件名> (gdb)set logging on (gdb)…
Bash 目录 pwd  //查看当前目录 mkdir dir1 dir2  //创建目录 tree dir1 mv test1.cpp test2.cpp dir1 dir  //移动文件/目录到目录dir rm -r dir         删除目录 cp -r dir1 dir2 复制目录 文件信息 ll –t //列出详细信息,按时间排序 ls -R(ecursive) 目录树 -l 详细信息 -t 时间排序 -S 大小排序 -X 扩展名排序 -r(everse) 逆序 –h(uman)…
在设计函数时需要遵循一些基本原则,因为影响到函数的执行效率和可用性.函数是代码复用的基础,一个健壮的函数或由函数组成的函数集可以在多个程序中使用.C语言标准库里存放的就是这样的函数,这些函数被放置在头文件中,使用时将它包含在程序内即可. 5.5.1 参数 和 通用函数 通用函数 是指能够复用的函数,这一类函数的显著特点是,只使用参数作为接口传递数据.如果一个函数中依赖全局变量访问调用者的数据,在另一个程序中环境改变了,这个函数就无法运行.因此,不应该把函数建立在全局 变量上,函数所需要的所有数据…
linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环境的建立 gdb基础 基本命令 gdb之gui gdb技巧 gdb宏 汇编基础--X86篇 用户手册 AT&…
20165205 Exp2 后门原理与实践 实验内容 一.基础问题回答 列举你能想到的一个后门进入到你系统中的可能方式 下载盗版软件.操作系统 当然正版软件里可能也有编写者安装的后门 不在官方更新软件 浏览危险网页 购买二手电脑 列举你知道的后门如何启动起来(win及Linux)的方法 后门伪装自己,后门伪装成正常软件,或者和正常软件绑定在一起,点击就运行了 cron启动 被设置了开机自启动 Meterpreter有哪些给你印象深刻的功能 Meterpreter为我们准备好了许多零件,我们想要做…
https://mp.weixin.qq.com/s/sGS-Kw18sDnGEMfQrbPbVw 内核futex的BUG导致程序hang死问题排查 原创: 王领先 58架构师 今天   近日,Hadoop的同学反映,新上的几台机器上的java程序出现hang死的现象,查看系统的message记录,发现一些内存方面的错误输出,怀疑是内存不足导致java程序hang死在gc的过程中.经排查发现即使是在内存充足的情况下也会出现程序hang死的现象. 我们又发现只有这批新上的机器才出现hang死的问题…
NULL是个指针,还是个整数?0?或(void*)0?答案是和g++版本有关.g++ 4.6支持C++11,引入了nullptr,也许会发生变化. 可以写段简单代码求证一下: #include <stdio.h> #include <typeinfo> int main() { printf("NULL: %d\n", NULL); printf("sizeof(NULL): %d\n", sizeof(NULL)); printf(&quo…
CSAPP buffer lab为深入理解计算机系统(原书第二版)的配套的缓冲区溢出实验,该实验要求利用缓冲区溢出的原理解决5个难度递增的问题,分别为smoke(level 0).fizz(level 1).bang(level 2).boom(level 3).kaboom(level 4).在实践中加深对函数调用和缓冲区溢出机制的理解(针对IA-32体系结构). 本记录使用的是取自原书配套网站的self-study handout版本,网址为http://csapp.cs.cmu.edu/2…
1. 介绍 本文介绍了调试的一些常用函数和工具 2. 函数 用户态函数: backtrace()/backtrace_symbols() 内核态函数: dump_stack() 3. 工具 工具: gdb.pstack/gstack.strace 参考:<libunwind><backtrace><libbacktrace>…
目录 pstack gdb strace perf pstack 获取堆栈信息 问题线程的定位 负载较低 mysql_pid=4522 pstack $mysql_pid>pstack.info pt-pmp对堆栈信息排序 pt-pmp pstack.info | less 也可以直接执行pt-pmp pt-pmp --pid 4522 如 10 __io_getevents_0_4(libaio.so.1),LinuxAIOHandler::collect(os0file.cc:2502),L…
http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环…
原文地址:http://blog.csdn.net/astrotycoon/article/details/50857326 [侵删] 什么是表达式(表达式的定义)? 对于表达式的定义,好像从来没有人关注过.今天就孔乙己一把吧,哈哈.先贴标准对expression的定义(ISO/IEC 9899:2011  6.5): An expression is a sequence of operators and operands that specifies computation of a valu…
目录 目录 1 1. 库函数fflush原型 1 2. FILE结构体 1 3. fflush函数实现 2 4. fclose函数实现 4 附1:强弱函数名 5 附2:属性__visibility__ 6 1. 库函数fflush原型 先瞧瞧fflush的原型: #include <stdio.h> int fflush(FILE *stream); 可看到fflush操作的是FILE,这里的FILE又长什么样?如果参数传入NULL,则对所有已打开的有效. 2. FILE结构体 直接查看源码,…
hi, 大家好,我是 haohognfan. 可能你看过的 interface 剖析的文章比较多了,这些文章基本都是从汇编角度分析类型转换或者动态转发.不过随着 Go 版本升级,对应的 Go 汇编也发生了巨大的变化,如果单从汇编角度去分析 interface 变的非常有难度,本篇文章我会从内度分配+汇编角度切入 interface,去了解 interface 的原理. 限于篇幅 interface 有关动态转发和反射的内容,请关注后续的文章.本篇文章主要是关于类型转换,以及相关的容易出现错误的地…
QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1   C语言程序设计高级实用速成课程 基础+进阶+自学 课程2   C语言程序设计Windows GDI图形绘制编程实用课程 课程3   C语言程序设计实用数据结构实战课程 课程4   C语言程序设计用户界面框架实战课程 课程5   C语言程序设计坦克世界项目实战课程像素版 课程6   C++程序设计C++11/C++14/C++17新特性详解实用 课程7   C++STL标准模板库源码分析课程 课程8  …
nginx源码分析--使用GDB调试(strace.  pstack ) http://blog.csdn.net/scdxmoe/article/details/49070577…
1:代码 下面是一个简单的能够发生死锁的代码: #include <unistd.h> #include <pthread.h> #include <string.h> typedef struct { pthread_mutex_t mutex1; pthread_mutex_t mutex2; int sequence1; int sequence2; }Counter; void* thread1(void* arg) { Counter *cc = (Count…
一.环境准备 1. 搭建adb调试桥 可参考文章<ADB调试桥安装(方式二)> 2. 安装调试gdb工具 可参考文章<移动设备中导入gdb调试工具> 二.测试执行 root@G808_3G:/system/bin # ps | grep com.baidu.superservice ====>查找你要测试的目标进程 ps | grep com.baidu.superservice u0_a66 1019 132 509064 30468 ffffffff 40102b10 S…
转自:http://www.cnblogs.com/mumuxinfei/p/4366708.html 前言: 最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到了pstack这个工具. 之前写JAVA程序, 对jstack这个工具, 非常的喜欢, 觉得很有用. 于是想比较下pstack和jstack的异同.  和jstack一样, pstack亦能展现进程的线程堆栈快照, 非常方便验证和性能评估. 本文用来简单展示下pstack的使用方式和原理. pstack使用…
前言: 最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到了pstack这个工具. 之前写JAVA程序, 对jstack这个工具, 非常的喜欢, 觉得很有用. 于是想比较下pstack和jstack的异同. 和jstack一样, pstack亦能展现进程的线程堆栈快照, 非常方便验证和性能评估. 本文用来简单展示下pstack的使用方式和原理. pstack使用 pstack使用非常的简单, 让我们写个简易多线程程序: 编译执行后, 使用pstack体验下: 注: 大…
你好,我是雨乐! 在上篇文章中,我们分析了线上coredump产生的原因,其中用到了coredump分析工具gdb,这几天一直有读者在问,能不能写一篇关于gdb调试方面的文章,今天借助此文,分享一些工作中的调试经验,希望能够帮到大家. 写在前面 在我的工作经历中,前几年在Windows上进行开发,使用Visual Studio进行调试,简直是利器,各种断点等用鼠标点点点就能设置:大概从12年开始转Linux开发了,所以调试都是基于GDB的.本来这篇文章也想写写Windows下调试相关,奈何好多年…
1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方式gdb program core //用gdb查看core dump文件,跟踪程序core的原因gdb program pid //用gdb调试已经开始运行的程序,指定pid即可gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可 2.调试命令(1)执行命令模式-bat…
[转] http://www.syyong.com/php/Using-strace-GDB-and-tcpdump-debugging-tools-in-PHP.html 在php中我们最常使用调试方式是输出打印方式,比如通过echo.var_dump输出信息到终端或者通过fwrite.file_put_contents将信息写入到文件中.这种普通方式能帮我们解决绝大部分调试问题.但仍然有些问题是需要借助其他工具来分析的,比如死循环,程序执行时间超预期,占用cpu过高,php内核或者扩展错误等…
pstack命令用来显示进程的栈跟踪. pstack 命令必须由相应进程的属主或root账号运行.可以使用pstack来确定进程挂起的位置.此命令只有一个参数,那就是pid,具体关于pstack的介绍可以查看man手册,如下所示: [root@DB-Server ~]# man pstack PSTACK(1)                  Linux Programmer's Manual                 PSTACK(1)   NAME        pstack - p…