gpt4 book ai didi

interrupt - 如何知道接收到信号时正在执行哪一行代码

转载 作者:行者123 更新时间:2023-12-04 11:48:12 26 4
gpt4 key购买 nike

我正在尝试做这样的事情

$SIG{ALRM} = sub {
print $line_number_when_alarm_went_off;
};

alarm 10;

# rest of the script

我正在使用 ALRM例如,我最终会使用不同的信号从外部杀死以触发它。有没有一种巧妙的方法来进行这种操作?

我有一些缓慢的脚本,有时我想向他们发送信号以了解当时代码的位置。

我想让它尽可能不引人注目,以便我可以打包它并将其添加到遗留代码中。

最佳答案

您可以使用 caller 在列表上下文中获取当前 sub 被调用的位置的包、文件和行号。

$SIG{ALRM} = sub {
my ($pkg, $file, $line) = caller;

CORE::say $line;
die;
};

alarm 2;

while (1) {
1;
}

这将输出 11 (如果我算对了,在我的文件中是 1740,而 $SIG 行是 1730。

它也适用于其他信号处理程序,例如 warn .
$SIG{__WARN__} = sub {
my ($pkg, $file, $line) = caller;

CORE::say $line;
};

warn 'foo';

这将输出 7
请注意,您的代码有语法错误。您正在分配一个散列引用作为信号处理程序, 不是子引用 !

关于interrupt - 如何知道接收到信号时正在执行哪一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42140250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com