如何在调试器中调试Word嵌入Excel的IDTExtensibility2加载项
如何附加调试嵌入Word中的Excel加载项
我之前也碰到过类似的跨Office宿主调试问题,给你分享几个靠谱的解决步骤,分两种情况来处理:
情况1:嵌入的Excel启动了独立进程
当你双击Word里的嵌入Excel工作表后,如果它弹出了独立的Excel窗口,那加载项其实是跑在单独的EXCEL.EXE进程里的,这时候需要手动把VS调试器附加到这个进程:
- 保持当前VS的Word调试会话不要关闭,先激活嵌入的Excel让它运行起来。
- 打开VS顶部的
调试菜单,选择附加到进程(快捷键Ctrl+Alt+P更方便)。 - 在进程列表里找到刚启动的
EXCEL.EXE(可以看进程的启动时间,或者任务管理器里确认哪个是新打开的Excel进程)。 - 选中进程后点击
附加,如果弹出调试类型选择窗口,根据你的加载项类型勾选对应选项(比如.NET框架或者本机代码,混合模式就都选)。 - 现在再操作嵌入的Excel工作表,你设置的断点就能命中了。
情况2:嵌入的Excel在Word进程内托管
如果嵌入的Excel是在Word窗口内直接编辑(没有独立Excel窗口),那加载项其实是在WINWORD.EXE进程里的Excel组件环境中运行的,这时候要检查这几点:
- 确认VS已经附加到
WINWORD.EXE进程(你调试Word的时候应该已经附加了,但可以在调试->附加到进程里确认)。 - 右键点击你的断点,检查是否设置了错误的条件导致无法命中,或者直接右键断点选择
删除条件试试。 - 要是还是不行,在附加到
WINWORD.EXE的时候,点击窗口里的选择按钮,确保勾选了加载项对应的调试类型(比如你的加载项是.NET写的就勾选.NET Framework,原生代码就选本机)。 - 重新关闭并激活嵌入的Excel,触发加载项的代码逻辑,断点应该就会触发了。
小技巧:确认加载项所在进程
如果你不确定加载项跑在哪个进程里,可以在加载项的OnConnection方法里加一行调试输出:
System.Diagnostics.Debug.WriteLine($"加载项当前运行进程:{System.Diagnostics.Process.GetCurrentProcess().ProcessName}");
然后在VS的输出窗口(调试时显示)里就能看到进程名,直接对应着去附加就行,不会搞错。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

