You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中查看CLR抛出的EEFileLoadException及FileName属性?

C++调用.NET COM DLL时EEFileLoadException的调试解决方案

一、让调试器识别EEFileLoadException类型

EEFileLoadException是CLR内部私有异常类型,默认VS调试器未加载其符号信息,可通过以下方式解决:

  • 启用微软公共符号服务器:
    1. 打开VS2019「工具」→「选项」→「调试」→「符号」
    2. 勾选「Microsoft符号服务器」,设置本地符号缓存目录(如C:\Symbols)
    3. 确认后重新调试,调试器会自动下载CLR相关符号,此时即可识别EEFileLoadException类型
  • 手动加载clr.dll符号:
    若自动下载失败,找到对应版本clr.dll的.pdb文件,调试时打开「模块」窗口,右键clr.dll选择「加载符号」并指定pdb路径

二、获取FileLoadException的FileName属性

符号加载完成后,按以下步骤操作:

  1. 在_CxxThrowException断点处,打开监视窗口,输入表达式:
    ((EEFileLoadException*)pExceptionObject)->m_pInnerException
    
    得到内部封装的System.IO.FileLoadException对象指针
  2. 接着输入以下表达式直接查看FileName属性:
    ((System.IO.FileLoadException*)((EEFileLoadException*)pExceptionObject)->m_pInnerException)->FileName
    
  3. 更简便的方式:若混合模式调试配置正常,直接在监视窗口输入@$exception,展开后即可查看当前CLR异常的FileName属性

三、符号加载失败时的替代方案

  • 强制CLR异常中断:
    1. 打开VS「调试」→「窗口」→「异常设置」
    2. 展开「Common Language Runtime Exceptions」,找到System.IO.FileLoadException并勾选「抛出时中断」
    3. 重启调试,调试器会直接在CLR抛出异常时中断,无需进入C++的_CxxThrowException函数,可直接查看异常详情
  • 日志辅助排查:
    在.NET COM DLL中添加全局异常捕获逻辑,捕获FileLoadException时将FileName写入日志,或通过COM接口把错误信息返回给C++调用方

内容的提问来源于stack exchange,提问作者ynaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:09:55