我正在尝试在 Eclipse/PyDev 中运行的 python 应用程序上使用 showing-stack-trace-of-running-python-application 中描述的策略。我在 salt.utils 目录中安装了其中描述的模块(在文件 show_stack_trace.py 中),该目录在 PYTHONPATH 中引用。然后我(按照描述中给出的说明)调用模块的监听函数,然后在调试器中启动目标应用程序。我命中断点,然后“恢复”执行,然后继续执行。然后,我尝试通过从 Eclipse 控制台执行 OS.kill(pid, signal.SIGUSR1) 来发送 SIGUSR1 信号。这导致出现错误消息“[无效框架]:请选择框架以连接控制台”。我对使用 Eclipse/PyDev 调试器的经验不足,不知道如何“选择框架”。我不完全确定是否可以使用 Eclipse Python 控制台发送 SIGUSR1 信号,也不确定如何以其他方式发送它。这是显示情况的 Eclipse 窗口:
我想这是一个基本问题,但我对使用 Eclipse/PyDev 很陌生。任何帮助将不胜感激。顺便说一下,你可能注意到我在调用 os.kill 之前没有执行“import os”。我在完成屏幕截图后注意到了这一点,但执行“import os”生成了与 os.kill(...) 相同的错误消息。
纯粹通过随机尝试,我解决了问题。我需要使用不同的控制台(按照 LMC 的建议)。我切换到 PyDev 控制台。然后我输入:
import os; import signal; os.kill(14652, signal.SIGUSR1).
14652 是与我想要获取堆栈转储的“帧”相关的进程的 pid。虽然这允许我向进程发送 SIGUSR1 信号,但我不知道堆栈转储位于哪里。所以,我解决了这篇文章标题的问题,但仍然需要弄清楚我正在寻找的信息位于哪里。