如何在Rider插件中编程实现Native调试器附加?
Rider插件开发:实现Native(LLDB)调试器进程附加
一、是否存在简便的直接调用?
没有类似DebuggerManager.attach(pid, "Native")的极简API,但可以复用Rider内置的Native调试器逻辑,实现和手动操作完全一致的效果,避免自己从头构建复杂参数。
二、实现与「Attach with LLDB」完全一致的行为
要复现手动通过Run->Attach to process...->选择进程->Attach with LLDB的流程,核心是复用Rider的Native调试器配置和执行逻辑,步骤如下:
1. 获取目标进程实例
已知PID的情况下,通过ProcessManager获取进程对象:
val targetPid = 1234 // 替换为你的目标进程PID val process = ProcessManager.getInstance().findProcessById(targetPid) ?: return val project = actionEvent.project ?: return
2. 创建Native Attach运行配置
构建Rider内置的NativeAttachRunConfiguration,指定使用LLDB调试器:
val configType = RunConfigurationType.EP_NAME.findExtension(NativeAttachRunConfigurationType::class.java) ?: return val settings = configType.factory.createTemplateConfiguration(project) as NativeAttachRunConfigurationSettings settings.apply { this.process = process debuggerKind = NativeDebuggerKind.Lldb // 硬编码指定LLDB }
3. 构建ExecutionEnvironment
通过配置创建调试会话的执行上下文:
val debugExecutor = DefaultDebugExecutor.getDebugExecutorInstance() val environment = ExecutionEnvironmentBuilder.create(project, debugExecutor, settings).build()
4. 启动调试会话
使用带ExecutionEnvironment的startSessionAndShowTab重载,让Rider自动处理调试器启动逻辑:
val sessionName = "Attach to ${process.name} (PID: $targetPid)" XDebuggerManager.getInstance(project).startSessionAndShowTab( sessionName, object : XDebugProcessStarter() { override fun start(session: XDebugSession): XDebugProcess { return DefaultDebugRunner.getDebugRunner().createDebugProcess(environment, session) } }, environment )
三、各参数的说明与手动获取方式
如果需要手动构建参数而非复用内置逻辑,各参数的处理方式如下:
- RunContentDescriptor: 用于复用已有的调试工具窗口标签,不需要复用则传
null。如需复用,可通过RunContentManager.getInstance(project).getDescriptors(debugExecutor)查找已有会话的描述符。 - XDebugProcessStarter: 必须实现
start方法,返回对应调试器的XDebugProcess实例。对于LLDB,需实例化LldbDebugProcess,但该类依赖大量内部初始化参数,推荐复用内置配置的方式更高效。 - ExecutionEnvironment: 包含调试会话的所有上下文信息(项目、执行器、运行配置等),通过
ExecutionEnvironmentBuilder从RunConfiguration构建。 - showToolWindowOnSuspendOnly: 布尔值,
false表示立即显示调试工具窗口,true表示仅在进程暂停时显示。 - Icon: 调试标签的图标,Native调试器可使用
NativeIcons.NativeDebugger。
内容的提问来源于stack exchange,提问作者IC_
相关产品推荐
相关产品推荐

