上周同事装了个 PDF 转换工具,导入文件点开始,弹出一个白框,只有一行 An unexpected error occurred,底下就一个 OK 按钮。点掉再试,还是一样。

这种提示等于没说。unexpected 是程序自己的说法,翻译过来就是「我没想到会这样」,它没告诉你哪个文件、哪一步、什么原因。有用的信息都在别处。

先翻日志,别急着重装

Windows 上先看事件查看器的应用程序日志,时间对上那几次失败,来源一般就是软件名或者 .NET Runtime。里面的异常类型和堆栈,比弹窗有用得多。

软件自己的日志通常在 %APPDATA% 下或者安装目录的 logs 文件夹,按修改时间排序,最新的那个就是。搜 error 和 exception 两个词,能定位到具体模块。

三类最常见的原因

  • 路径里有中文或特殊字符,老程序读文件时编码没处理好。
  • 配置文件损坏,删掉或者改名让它重新生成,往往就好了。
  • 缺运行库,比如某个版本的 .NET Framework、VC++ 运行库。

还有一种:文件本身是空的,或者正被别的程序占用。从聊天软件直接拖出来的文件,进程还锁着,转换工具读不到,也会报 unexpected。

杀毒软件把主程序隔离了也算。壳还在,点开就报错,去隔离区看一眼,比重新下载快。

写代码的人能做什么

catch 到异常时,把 message、堆栈、当前处理的文件名一起写进日志,弹窗只留一句「处理失败,详情见日志」。用户看不懂堆栈没关系,能转发给客服就行。

开发环境里能复现的话,把日志级别调到 debug 再跑一次,通常能看到出错前最后一个成功的操作,范围一下就缩小了。

最怕的是 catch 住什么都不做,只弹一句 unexpected error。问题被吞掉,用户只能重启、重装、换软件,一圈下来还是没解决。