debugging 如何将调试器连接到正在运行的Perl进程?

cwdobuhd  于 2022-11-14  发布在  Perl
关注(0)|答案(3)|浏览(190)

我 有 一 个 正在 运行 的 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)

中 的 每 一 个
我 做 错 了 吗 ? 还有 别的 选择 吗 ?
另外 , 如果 您 认为 自己 可以 从 附加 到 正在 运行 的 进程 的 调试 器 中 获益 , 则 可以 插入 一 个 由 SIGUSR1 触发 的 调试 器 后门 :

use Enbugger::OnError 'USR1';

格式
然后 , 您 只需 kill -USR1 pid , 您 的 进程 将 跳转 到 调试 器 。

yk9xbfzb

yk9xbfzb1#

首先,如果你想用gdb检查它,请使用DEBUGGING perl。
请定义“阻塞”。忙碌或非忙等待(高或低CPU),是否占用内存?while为1表示忙等待。我通常会在Perl_hfree_next_entry()中的HV损坏上忙等待(无休止的循环)(从5.15开始)。非忙等待通常是等待阻塞IO读取。
我得到的正确答案是:

`0x00007fba15ab35c1 in Perl_runops_debug () at dump.c:2266`
`2266       } while ((PL_op = PL_op->op_ppaddr(aTHX)));`

并且可以检查一切,比使用简单的perl调试器要多得多。

`(gdb) p Perl_op_dump(PL_op)`

和/或其他信息。
如果你必须用perl:在pp_stub函数中,最好不要进入Enbugger运行循环,您应该在dump.c的主运行循环中。在显示的行中设置断点。
eval上的“error for object 0x 3”听起来像是上下文中的内部损坏,所以你应该查看cx和堆栈指针。可能是因为你在一个错误的上下文中启动了它。

mbzjlibv

mbzjlibv2#

我从来没有用过gdb,但也许你可以从strace那里得到一些有用的东西?

strace -f -s512 -p <PID>
dsf9zpds

dsf9zpds3#

http://metacpan.org/pod/App::Stacktrace“perl-stacktrace打印给定Perl进程的Perl线程的Perl堆栈跟踪。对于每个Perl帧,将打印完整的文件名和行号。

相关问题