【问题标题】:How to debug variables in Autohotkey without using MsgBox?如何在不使用 MsgBox 的情况下调试 Autohotkey 中的变量?
【发布时间】:2013-08-06 12:48:27
【问题描述】:

在调试脚本时,您通常需要知道变量的值才能准确了解发生了什么。使用MsgBox 输出变量来解决这个问题既烦人又低效。

有没有可以帮助我调试变量的函数?

我希望它把我所有的局部变量、它们的名称和相应的值以及正在执行的当前过程的名称写到一个 ini 文件中。是否有可以实时提供此功能的调试工具?

过程的名称可能很难做到,但有没有办法至少可以枚举和写掉所有局部变量?

【问题讨论】:

    标签: debugging autohotkey


    【解决方案1】:

    看看ListVars command。它列出了所有变量。

    您还可以使用以下方法获得更广泛的信息:

    MsgBox, % GetAhkStats("lines")
    MsgBox, % GetAhkStats("variables")
    MsgBox, % GetAhkStats("hotkeys")
    Stat1 := GetAhkStats("history")
    MsgBox, %Stat1%
    Return
    
    a::a
    b::b
    c::c
    d::d
    
    GetAhkStats(xxSection="", xxUseWindow=99, xxDestroyAfter=1)
    {
      xxSectionN = Lines|Variables|Hotkeys|History
      If xxSection=
        xxSection = History
      Loop, Parse, xxSectionN, |
        IfInString, A_LoopField, %xxSection% 
          xxSection = %A_Index%
      DetectHiddenWindows, On
      SetTitleMatchMode, 2
      Gui, %xxUseWindow%:Show, Hide
      xxHidWin := WinExist(A_ScriptFullPath " - AutoHotkey v")
      xxOldpar := DllCall("GetParent", "UInt", xxHidWin)
      DllCall("SetParent", "UInt", xxHidWin, "UInt", (GuiGetHWND("", xxUseWindow)))
      WinMenuSelectItem, ahk_id %xxHidWin%,, View, %xxSection%&
      Loop {
        Sleep, 50
        ControlGetText, xxOut1, Edit1, ahk_id %xxHidWin%
        If xxOut1<>
          break
      }
      WinHide, ahk_id %xxHidWin%
      DllCall("SetParent", "UInt", xxHidWin, "UInt", xxOldpar)
      If (xxDestroyAfter)
        Gui, %xxUseWindow%:Destroy
    Return, xxOut1
    }
    
    GuiGetHWND(xxClassNN="", xxGUI=1)
    {
      If (xxGUI)
        Gui, %xxGUI%:+LastFound
      xxGui_hwnd := WinExist()
      If xxClassNN=
        Return, xxGui_hwnd
      ControlGet, xxOutputVar, Hwnd,, %xxClassNN%, ahk_id %xxGui_hwnd%
    Return, xxOutputVar
    }
    

    Source

    【讨论】:

    • @Khalil 我认为人们只是误读了您的答案。我删除了您发布的答案中的 cmets,因为它们并没有多大意义。您可能想查看How to Answer 页面,了解有关编写全面而清晰的答案的一些提示,以确保不会再次出现这种混淆。
    【解决方案2】:

    listvars 对我有用。

    【讨论】:

    • 如果你自己解决了问题,它确实有助于解释,而不是它为你“做伎俩”,你如何使用它,并明确指出你解决了自己的问题,否则你让其他人解释它。
    • 作为后续,您正在寻找“我所有的局部变量、它们的名称和对应的值以及正在执行的当前过程的名称”。通过为 ListVars 提供确切的命令(我确定您需要设置特定的标志来获得您想要的)来执行您所请求的任务,可以增强这个答案。
    • @JoshDM 那将是一个很好的补充。除了文档没有提供该信息。你从哪里读到的?
    • 我只是在做假设,因为 listvars 似乎是一个脚本;大多数脚本都允许设置选项。
    猜你喜欢
    • 2011-04-18
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2017-04-06
    • 2012-08-15
    • 2013-06-23
    相关资源
    最近更新 更多