作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个正在运行的Perl进程,该进程卡住了,我想和一个调试器一起进入内部,看看有什么问题。我无法重新启动该过程。我可以将调试器附加到正在运行的进程吗?我知道我可以做gdb -p
,但是gdb
不能帮助我。我尝试了Enbugger,但失败了:
$ perl -e 'while (1) {}'&
[1] 86836
$ gdb -p 86836
…
Attaching to process 86836.
Reading symbols for shared libraries . done
Reading symbols for shared libraries ............................. done
Reading symbols for shared libraries + done
0x000000010c1694c6 in Perl_pp_stub ()
(gdb) call (void*)Perl_eval_pv("require Enbugger;Enbugger->stop;",0)
perl(86836) malloc: *** error for object 0x3: pointer being realloc'd was not allocated
*** set a breakpoint in malloc_error_break to debug
Program received signal SIGABRT, Aborted.
0x00007fff8269d82a in __kill ()
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on"
Evaluation of the expression containing the function (Perl_eval_pv) will be abandoned.
(gdb)
use Enbugger::OnError 'USR1';
kill -USR1 pid
,您的进程将跳入调试器。
最佳答案
首先,如果要使用gdb进行检查,请使用DEBUGGING perl。
请定义“卡住”。忙或不忙的等待(高或低CPU),是否正在消耗内存?
在1时,它正忙于等待。从5.15开始,我通常在Perl_hfree_next_entry()中忙于等待(无尽循环)HV损坏。非繁忙等待通常是等待阻塞的IO读取。
我得到正确的:
`0x00007fba15ab35c1 in Perl_runops_debug () at dump.c:2266`
`2266 } while ((PL_op = PL_op->op_ppaddr(aTHX)));`
`(gdb) p Perl_op_dump(PL_op)`
关于perl - 如何将调试器附加到正在运行的Perl进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8836711/
我是一名优秀的程序员,十分优秀!