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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:39:00