gpt4 book ai didi

perl - 如何调试突然退出的 Perl 程序?

转载 作者:行者123 更新时间:2023-12-01 09:09:21 24 4
gpt4 key购买 nike

我有基于 IO::Async 的 Perl 程序,有时它会在几个小时/几天后退出,而不会打印任何错误消息。 dmesg/var/log 中也没有任何内容。 STDOUT/STDERR 都是 autoflush(1) 所以数据不应该在缓冲区中丢失。它实际上并没有从 IO::Async::Loop->loop_forever 退出 - 我放在那里只是为了确保它永远不会被触发。

现在,一种方法是继续在程序中添加越来越多的打印件,并希望其中一个能给我一些线索。有没有更好的方法来获取导致程序退出/静默崩溃的信息?

最佳答案

我使用的一个技巧是在 straceltrace 下运行程序(或使用 strace 附加到进程)。自然是在 Linux 下。在其他操作系统下,您将使用 ktracedtrace 或任何合适的。

我对仅在数天或数周内表现出稀疏问题的程序使用的一个技巧是,将跟踪器的输出定向到 FIFO,并让自定义程序仅保留 10K 行在环形缓冲区中(并在 SIGPIPE 和 SIGHUP 上使用处理程序将当前缓冲区内容转储到文件中。(这是一个简单的程序,但我手边没有副本,今晚我不打算重写它; 我的副本是为内部使用而编写的,归前雇主所有)。

环形缓冲区允许程序无限期地运行,而不必担心运行系统会耗尽磁盘空间……在这种情况下,我们通常只需要几百行甚至几千行的跟踪信息。

关于perl - 如何调试突然退出的 Perl 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3003444/

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