美文网首页
如何使用systemtap抓取golang用户态程序系统堆栈

如何使用systemtap抓取golang用户态程序系统堆栈

作者: marshalzxy | 来源:发表于2022-05-21 14:56 被阅读0次

首先是在systemtap脚本中定义能够抓取golang堆栈的功能函数:

```function print_time_now() {

  ms = gettimeofday_us()

  sec = gettimeofday_s()

  printf(“%s %d\(us\)\n”,ctime(sec),ms-sec*1000000 )

}

function print_x8664_gostack(){

  goBaseName = “runtime.go exit”

  rip = u_register(“rip”)

  rbp_itr = u_register(“rbp”)

  funcName = usymname(rip)

  fileLine = usymline(rip)

  printf(“%p: %s\n”,rip,funcName)

  while(funcName != goBaseName && rbp_itr !=0){

  funcName = usymname(user_long(rbp_itr+8))

  fileLine = usymline(user_long(rbp_itr+8))

  printf(“%p: %s \n”,user_long(rbp_itr+8),funcName)

  rbp_itr = user_long(rbp_itr)

  }

  printf(“……….……..\n”) 

}

function dumpProccessInfo(){

  printf(“pid:%d, tid:%d, pid name:%s, ppid:%d, ppid name:%s, func:%s, cmd:%s \n”,pid(),tid(),pid2execname(pid()),ppid(), pid2execname(ppid()), ppfunc(), cmdline_str())

)

}```

/*实际使用上述函数的例子*/

’’’

相关文章

  • 如何使用systemtap抓取golang用户态程序系统堆栈

    首先是在systemtap脚本中定义能够抓取golang堆栈的功能函数: ```function print_ti...

  • 如何使用systemtap抓取golang 堆栈

    首先是在systemtap脚本中定义能够抓取golang堆栈的功能函数: 下面结合实际例子给出上述systemta...

  • Linux内核——用户堆栈和内核堆栈

    定义 每个进程都有用户堆栈和内核堆栈两个堆栈。进程在用户态时使用用户堆栈,陷入到内核态时便使用内核堆栈。 切换过程...

  • 内核态和用户态

    内核态和用户态是操作系统的两种运行级别,内核态权限高,用户态权限低。 用户程序从用户态切换到内核态:系统调用(软中...

  • 操作系统

    什么是系统调用呢? 用户态(user mode) : 用户态运行的进程可以直接读取用户程序的数据。系统态(kern...

  • 面试总结

    笔试题 1.如何对Golang程序做性能分析和调优?如何排查Golang程序的内存泄漏? 1)使用golang的工...

  • IO整理

    名词解释: 区域 用户态:用户应用程序所在的。内核态:操作系统程序所在的。 磁盘与内核态的缓存传输数据 PIO:很...

  • linux-kernel 2.6源码阅读[1]系统调用

    一. 概述 系统调用是用户态程序与内核之间的交互的直接接口,用户态程序通过系统调用来请求各种各样的服务。linu...

  • 深入理解goroutine调度 2023-01-03

    内核态vs用户态 操作系统运行时使用的ram存储资源叫内核态用户(上层软件)运行时使用的ram存储资源叫用户态 对...

  • 火焰图生成

    上篇介绍了systemtap的使用。承接上篇,这篇接着纪录后续,用systemtap统计了信息,如何更加直观的观察...

网友评论

      本文标题:如何使用systemtap抓取golang用户态程序系统堆栈

      本文链接:https://www.haomeiwen.com/subject/vtucprtx.html