我注意到 IntelliJ 的调试器出现了一些意外和不良的行为,想知道是否有人了解这方面的情况。
我们的 Spring 应用程序具有相当复杂的关闭逻辑。我们利用 Spring 的“可处理 Bean”接口,并且还注册了自己的 JVM 关闭挂钩。我经常发现自己想在此代码中停止调试器。我希望能够通过按下 IntelliJ 调试器的停止按钮并使我的断点被命中来实现这一点。这是我预期的行为。
当我在 IntelliJ 调试器中按下停止按钮时,我的关闭代码中的断点没有被命中。起初,我认为可能是 IntelliJ 强制终止了我的应用程序,而不是向进程发送终止信号(我相信它会发送 SIGINT)。但是,我已经确认当我按下停止按钮时,我的关闭代码确实运行了。这种行为就像 IntelliJ 在向我的应用程序发送 SIGINT 信号之前注销了我的断点。
我的解决方法是从 shell 提示符中向我的应用程序发送 SIGINT。当我这样做时,我的断点被命中了。这很麻烦。因此,我想知道是否有人有办法在按下停止按钮时使断点被命中,或者至少了解调试器为什么会出现这种行为。