论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Intellij插件之调试制止生命周期
Intellij插件之调试制止生命周期
兜兜零元
金牌会员
|
2024-6-9 08:31:21
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
867
|
帖子
867
|
积分
2601
Intellij插件之调试制止生命周期
目次
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 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
兜兜零元
金牌会员
这个人很懒什么都没写!
楼主热帖
Oracle调度器Scheduler
clang-format的使用
数据库的建立、增、删、改、查 ...
深入解析kubernetes中的选举机制 ...
【黄啊码】MySQL入门—4、掌握这些数据 ...
MySQL安装配置
【黄啊码】MySQL入门—5、数据库小技巧 ...
2万多条健康网站文章大全ACCESS\EXCEL ...
看问题和做事情
V Rising 服务器搭建
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表