brpc icon indicating copy to clipboard operation
brpc copied to clipboard

core文件中查看切换出去的bthread栈信息

Open hnwyllmm opened this issue 6 years ago • 6 comments

Is your feature request related to a problem? (你需要的功能是否与某个问题有关?) 切换出去的bthread,在core文件中是看不到的,但是有时候会对检查问题有帮助,需要有手段去查看

Describe the solution you'd like (描述你期望的解决方法) 能够查看core文件中切换出去的bthread信息

Describe alternatives you've considered (描述你想到的折衷方案) 修改core文件,展示bthread栈信息

Additional context/screenshots (更多上下文/截图) 我目前实现了一个linux x86_64 gcc平台下的小程序,并附有一个gdb脚本,可以打印切换出去的bthread寄存器信息,根据寄存器信息修改core文件,实现可以用gdb直接查看core文件,通过info thread看到所有bthread。 这个实现非常简陋,也不支持其它平台,因为本人手上没有其他平台的测试环境。

hnwyllmm avatar Sep 20 '19 06:09 hnwyllmm

原理和 #903 类似吗?你可以先贴出来,大家试用下也可以给点反馈

jamesge avatar Sep 20 '19 07:09 jamesge

903的原理应该是把所有的bthread寄存器找出来,主要是rsp和rip,然后设置某个线程的rsp和rip为要查看的bthread的rsp和rip,就可以执行where命令了。这个只能gdb attach到进程看,而且是有风险的,如果在修改了某个线程的rsp/rip信息后,gdb无法正常退出,进程就会crash。 我的这个是针对core文件的工具,步骤比较繁琐。刚才忘记贴链接了,抱歉: https://github.com/hnwyllmm/coroutine_crash

hnwyllmm avatar Sep 20 '19 08:09 hnwyllmm

看了下找寄存器的方式是一样的,我在#903也加一个支持查看寄存器值的方法吧

lorinlee avatar Sep 20 '19 09:09 lorinlee

@lorinlee 我是看了你的python脚本才知道怎么遍历的^_^

hnwyllmm avatar Sep 20 '19 09:09 hnwyllmm

@lorinlee 我是看了你的python脚本才知道怎么遍历的^_^

哈哈,我学习下怎么改core文件

lorinlee avatar Sep 20 '19 10:09 lorinlee

通过简单修改gdb源码,实现在core文件中完整支持gdb_bthread_stack.py的所有功能 https://github.com/apache/brpc/issues/2624

weixinwei avatar May 06 '24 01:05 weixinwei