脚本小的时候,一个提示框就能看出问题;脚本一旦开始用定时器、循环、窗口控制、Excel COM、找图找色,弹窗调试就会变得很痛苦。我更推荐先学会写日志,再去处理异常。

我一般这样排查

  • 临时看变量:用 MsgBox
  • 排查长期运行脚本:用 FileAppend 写日志。
  • 调试器或外部工具看输出:用 OutputDebug
  • 可能失败的代码:用异常捕获,不要让错误静悄悄消失。
  • 全局异常兜底:最后再看错误回调 OnError()

从日志开始

日志最重要的不是复杂,而是每一行都有时间和关键变量。这样出错后可以回头看脚本运行过程。

#Requires AutoHotkey v1.1
Log("脚本启动")

Log(msg) {
    FormatTime, now,, yyyy-MM-dd HH:mm:ss
    FileAppend, [%now%] %msg%`n, %A_ScriptDir%\debug.log, UTF-8
}

把关键步骤写进去

不要只在出错时写日志,关键步骤也应该记录。这样可以知道脚本到底卡在哪一步。

Log("准备激活窗口")
WinActivate, ahk_class Notepad

if ErrorLevel
    Log("窗口激活失败")
else
    Log("窗口激活成功")

异常捕获适合包住高风险代码

COM、文件对象、网络请求、DllCall 这类操作,一旦失败可能会抛异常。用 Try/Catch 可以让错误变成可记录、可提示的信息。

try {
    xl := ComObjActive("Excel.Application")
    MsgBox, % xl.ActiveWorkbook.Name
} catch e {
    Log("Excel 连接失败:" e.Message)
    MsgBox, 没有连接到正在运行的 Excel
}

OutputDebug 适合配合调试工具

如果你使用调试器或 DebugView 一类工具,OutputDebug 可以不打断脚本运行。

OutputDebug, AHK 调试信息:准备点击按钮

不要把错误吞掉

很多脚本不稳定,是因为把错误吞掉了。捕获错误后至少要写日志,否则你只知道“没反应”,不知道哪里错。

站内延伸

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。