脚本小的时候,一个提示框就能看出问题;脚本一旦开始用定时器、循环、窗口控制、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 调试信息:准备点击按钮
不要把错误吞掉
很多脚本不稳定,是因为把错误吞掉了。捕获错误后至少要写日志,否则你只知道“没反应”,不知道哪里错。
站内延伸
- 剪贴板自动化为什么不稳定:ClipWait、备份恢复、延迟处理
- DllCall 入门:AHK 调用 Windows API 的最小示例
- Excel COM 前台操作:ComObjActive、ComObjCreate 怎么选
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)