AutoHotkey脚本编译为EXE后Exception函数What返回异常问题求助
问题原因
AutoHotkey 官方编译器默认编译时会剥离调用栈元数据与调试符号,导致 Exception 函数无法解析负偏移参数对应的调用栈帧信息,只能原样返回传入的偏移数值。
解决方案
方案1:编译时保留调试信息
使用官方 Ahk2Exe 编译器时,勾选界面中的「包含调试信息」选项后再编译,即可让 Exception 的偏移参数和未编译脚本表现完全一致。
- 注意:该方案会导致编译后的 exe 体积略微增大,且可被调试工具提取脚本源码,不适用于需要保护源码的场景。
方案2:改用内置变量主动传递调用方信息(推荐)
不依赖 Exception 的调用栈解析能力,使用 AHK 内置变量 A_ThisFunc 获取当前方法名,主动传递给被调用方,无需保留调试信息,编译后运行稳定无兼容性问题。
修改后的示例代码如下:
class MyClass { Method1() { MsgBox % MyClass.Method2(A_ThisFunc) } Method2(callerName) { return callerName } } MyClass.Method1()
如果需要获取多层级的调用栈信息,可以自行维护全局调用栈队列:进入函数时将 A_ThisFunc 推入队列,函数返回前将其弹出队列,随时可以从队列中读取任意层级的调用方名称。
内容的提问来源于stack exchange,提问作者mbourd
相关产品推荐
相关产品推荐

