Intellij插件之调试制止生命周期

兜兜零元  金牌会员 | 2024-6-9 08:31:21 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

Intellij插件之调试制止生命周期


目次

调试会话的创建


  • 调试会话的创建由 XDebuggerManager.startSessionAndShowTab 接口创建,返回一个类型为 XDebugSession 的实例。它会在 Debug 窗口创建一个调试会话。XDebugSession 是一个接口,详细实现类型为 XDebugSessionImpl。

  • 创建对应的 XDebugProcess 后广播 XDebuggerManagerListener 监听的 processStarted 事件。

  • showToolWindowOnSuspendOnly 属性决定了调试会话的展示机遇,true 则断点命中时展示,false 则默认展示。
  • 之后就是广播 processHandler#startNotified 事件。再之后就是通过 XDebugProcessStarter 创建 XDebugProcess,一个 XDdebugProcess 绑定一个 XDebugSession。
  • XDebugSession 初始化,初始化时对 XDebugProcess 中的 processHandler 添加了一个监听,当 processHandler 触发了 processTerminated 事件将会被广播回调。

调试制止

调试会话由 XDebugSession 管理,而 XDebugSession 会话绑定了一个 XDebugProcess,XDebugProcess 绑定一个 processHandler,所以当 processHandler 销毁时 XDebugSession 也就销毁了。
调试会话默认是不会自行关闭的,它可以由用户自己关闭,通过 UI 页面的入口:

制止调试原理:

  • 首先拿到当前运行所有的 RunContentDescriptor,然后遍历循环构造 HandlerItem 节点

  • HandlerItem 节点有个 stop 接口,点击每个节点都会触发,最后通过 ExecutionManagerImpl.stopProcess(descriptor) 销毁

  • 从代码实现逻辑可以看到最终销毁的就是一个 processHandler,而调试会话中的 XDebugProcess 绑定的是一个 DefaultDebugProcessHandler




    广播 ProcessListener 监听的 processWillTerminate 和 processTerminated 事件


    回过头来我们再看 XDebugSession 中对 XDebugProcess 中 processHandler 的注册监听:


    stopImpl 中做的事变主要是 XDebugProcess的一个 stopAsync 异步回调方法,默认不做任何事变,由用户自己编写的 XDebugProcess 实现去实现此方法,onSuccess 后触发 processStopped 方法:

    从上面可以看到首先将会发布 XDebuggerManager.TOPIC 的事件订阅,然后再从调试会话管理中移除 XDebugSesion,再然后广播 XDebugSessionListener#sessionStopped 事件,最后把所有 XDebugSessionListener 监听移除。
    调试会话各个监听器制止顺序

    所以通过以上分析我们有了以下结论,Intellij 调试会话制止时隔个监听广播销毁的顺序为:

    • processHandler 中的 ProcessListener 监听器
    • XDebugProcess#stop 方法
    • XDebuggerManagerListener#processStopped 方法
    • XDebugSession 从调试会话管理(XDebuggerManager)中移除
    • XDebugSessionListener#sessionStopped 方法
    • XDebugSessionListener 监听移除


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表