当前位置:   article > 正文

用gdb调试运行中的程序

用gdb调试运行中的程序

  今天一早到了公司,策划就和我说,前几天出过问题的那台服务器,玩家又登陆不上游戏了。
  上去一看,又是CPU使用100%。这问题最近经常出现,又不好查,就干脆让运维先别重启了,直接上线调试。
  一开始以为是lua脚本的死循环,后来才发现原来是底层的定时器问题。查了一整个上午,学到了一些gdb的东西,这里记录一下。

1、使用gdb调试正在运行的程序:
先使用top或者ps命令,查出进程的ID。
然后使用:
gdb 程序名 进程ID
可以看到Attaching to program:xxx,process 18675 这样的输出,表示已经附上进程开始调试。
对于多线程,可以先列出线程的信息
(gdb) info thread
得到线程的序号

  9 Thread 0xb7fb1b90 (LWP 18676)  0x0073f402 in __kernel_vsyscall ()
  8 Thread 0xb75b0b90 (LWP 18677)  0x0073f402 in __kernel_vsyscall ()
  7 Thread 0xb6bafb90 (LWP 18678)  0x0073f402 in __kernel_vsyscall ()
  6 Thread 0xb61aeb90 (LWP 18679)  0x0073f402 in __kernel_vsyscall ()
  5 Thread 0xb57adb90 (LWP 18680)  0x0073f402 in __kernel_vsyscall ()
  4 Thread 0xb4dacb90 (LWP 18681)  0x0073f402 in __kernel_vsyscall ()
  3 Thread 0xb41a9b90 (LWP 18682)  0x0073f402 in __kernel_vsyscall ()
  2 Thread 0xb37a8b90 (LWP 18683)  0x0073f402 in __kernel_vsyscall ()
* 1 Thread 0xb7fb26e0 (LWP 18675)  0x0073f402 in __kernel_vsyscall ()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

然后就可以选择需要调试的线程:
(gdb) thread 2
调试完成后,要使用detach 命令,让程序可以继续跑起来。

(gdb) detach
Detaching from program: xxx, process 18675
  • 1
  • 2

2、查看lua脚本的调用
当前调用的数据,在L->ci中可以查到,上一层调用的数据保存在L->ci - 1中,一直到L->base_ci
调用的文件名,以及行数,可以查看:
l->ci->func->value->gc->cl->l->p->source
l->ci->func->value->gc->cl->l->p->lineinfo

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/287972
推荐阅读
相关标签
  

闽ICP备14008679号