{"id":1562,"date":"2019-05-23T00:00:00","date_gmt":"2019-05-22T22:00:00","guid":{"rendered":"https:\/\/demo.sidekick.be\/itenium\/autohotkey-debugging\/"},"modified":"2025-11-28T13:31:44","modified_gmt":"2025-11-28T12:31:44","slug":"autohotkey-debugging","status":"publish","type":"post","link":"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/","title":{"rendered":"Autohotkey Debugging"},"content":{"rendered":"<h1 id=\"yunit\">Yunit<\/h1>\n<p><a href=\"https:\/\/github.com\/Uberi\/Yunit\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/Uberi\/Yunit.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/Uberi\/Yunit\">Uberi\/Yunit<\/a>: Nothing beats a test runner: Uberi and infogulch created one.<\/p>\n<p>Our fork of the super simple Yunit Autohotkey testing framework adds a ps1 colored console runner and monitoring. Check our <a href=\"https:\/\/github.com\/itenium-be\/Yunit\">Github README<\/a> for a screenshot and code example.<\/p>\n<h1 id=\"builtin-functionality\">Builtin functionality<\/h1>\n<h2 id=\"msgbox\">MsgBox<\/h2>\n<p>MsgBox pauses the current thread so you can use \u201cother debugging tools\u201d while displaying something.<\/p>\n<pre><code class=\"language-autohotkey\">var := 10\nvas := 5\nMsgBox aaargh %var%\nMsgBox % var \"and\" vas\n<\/code><\/pre>\n<h4 id=\"tooltip\">Tooltip<\/h4>\n<p><a href=\"https:\/\/autohotkey.com\/docs\/commands\/ToolTip.htm\"><code>Tooltip<\/code><\/a> creates a non-blocking, always-on-top window anywhere on the screen.<\/p>\n<pre><code class=\"language-autohotkey\">Tooltip [, Text`nMoreText, X, Y, WhichTooltip]\n<\/code><\/pre>\n<ul>\n<li>If Text is omitted, the tooltip is hidden.<\/li>\n<li>If X &amp; Y are omitted, the tooltip is displayed near the mouse cursor.<\/li>\n<li>X &amp; Y are relative to the active window. Use <a href=\"https:\/\/autohotkey.com\/docs\/commands\/CoordMode.htm\"><code>CoordMode<\/code><\/a> to display somewhere else.<\/li>\n<li>WhichTooltip: A number between 1-20 to control multiple tooltips.<\/li>\n<\/ul>\n<h2 id=\"windows\">Windows<\/h2>\n<p>I\u2019ll be honest, they are not the prettiest tools in the shed. They do come in handy from time to time and are available from the default tray icon menu.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.autohotkey.com\/docs\/commands\/KeyHistory.htm\"><code>KeyHistory<\/code><\/a>: Unsure how to bind a certain key\/mouse button? Use this tool!<\/li>\n<li><a href=\"https:\/\/www.autohotkey.com\/docs\/commands\/ListVars.htm\"><code>ListVars<\/code><\/a>: Lists all variable names with content. Good for primitives (ie: an Array displays <code>Object object {address: 0x5B2AD0}<\/code>).<\/li>\n<li><a href=\"https:\/\/www.autohotkey.com\/docs\/commands\/ListLines.htm\"><code>ListLines<\/code><\/a>: Script lines most recently executed.<\/li>\n<li><a href=\"https:\/\/www.autohotkey.com\/docs\/commands\/ListHotkeys.htm\"><code>ListHotkeys<\/code><\/a>: Very crude listing of all registered hotkeys.<\/li>\n<\/ul>\n<p>Scripts to <a href=\"https:\/\/www.autohotkey.com\/boards\/viewtopic.php?f=6&amp;t=9656&amp;p=248727\">retrieve and parse the output for these windows<\/a>.<\/p>\n<h3 id=\"window-spy\">Window Spy<\/h3>\n<p>Activate scripts only in certain contexts with <code>IfWinActive<\/code>. But how to determine this <code>ahk_class<\/code> thingy?<\/p>\n<pre><code class=\"language-autohotkey\">; Esc twice to open\/close DevTools... But only in Chrome\n#IfWinActive, ahk_class Chrome_WidgetWin\n~Esc::\nIf (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey &lt; 500)\n    Send {F12}\nReturn\n#IfWinActive\n<\/code><\/pre>\n<p>To figure that out (and much more!), bundled with Autohotkey comes the immensely useful utility Window Spy (usually called <code>AU3_Spy.exe<\/code>). It\u2019s also available from the tray menu.<\/p>\n<h2 id=\"warnings\">Warnings<\/h2>\n<pre><code class=\"language-autohotkey\">; Default: Disable all warnings.\n#Warn All, Off\n\n; Every warning in a MsgBox.\n#Warn\n\n; Warn when a local variable is used before it's set in OutputDebug.\n#Warn UseUnsetLocal, OutputDebug\n<\/code><\/pre>\n<p>Warning Types:<\/p>\n<ul>\n<li>UseUnsetLocal and UseUnsetGlobal<\/li>\n<li>LocalSameAsGlobal<\/li>\n<li>ClassOverwrite<\/li>\n<li>UseEnv: Warn when a variable used has the same name as an environment variable. To avoid this confusion, start with <a href=\"https:\/\/autohotkey.com\/docs\/commands\/NoEnv.htm\"><code>#NoEnv<\/code><\/a> and use <a href=\"https:\/\/autohotkey.com\/docs\/commands\/EnvGet.htm\"><code>EnvGet<\/code><\/a> \/ <a href=\"https:\/\/autohotkey.com\/docs\/commands\/EnvSet.htm\"><code>EnvSet<\/code><\/a> for interacting with environment variables instead.<\/li>\n<\/ul>\n<h2 id=\"outputdebug\">OutputDebug<\/h2>\n<pre><code class=\"language-autohotkey\">OutputDebug, Value of %var%\n<\/code><\/pre>\n<p>If the script\u2019s process has no debugger, the system debugger displays the string. Follow <code>OutputDebug<\/code> with, for example DebugView (<code>Dbgview.exe<\/code>) from <a href=\"https:\/\/docs.microsoft.com\/en-us\/sysinternals\/\">Sysinternals<\/a>.<\/p>\n<h2 id=\"suspension\">Suspension<\/h2>\n<h3 id=\"pause\">Pause<\/h3>\n<p><a href=\"https:\/\/www.autohotkey.com\/docs\/commands\/Pause.htm\"><code>Pause<\/code><\/a> will toggle the current thread. Hotstrings and Hotkeys will still run. <code>A_IsPaused<\/code> contains the pause state of the underlying thread.<\/p>\n<pre><code class=\"language-autohotkey\">; Freezes the current thread with Windows + Pause\n#Pause::Pause, On\n; Also: Off and Toggle (default)\n<\/code><\/pre>\n<h3 id=\"suspend\">Suspend<\/h3>\n<p><a href=\"https:\/\/www.autohotkey.com\/docs\/commands\/Suspend.htm\"><code>Suspend<\/code><\/a> will enable\/disable all hotkeys and hotstrings. <code>A_IsSuspended<\/code> contains the script suspension state.<\/p>\n<pre><code class=\"language-autohotkey\">^#Pause::\n; Suspend, On\/Off\/Toggle (default)\nSuspend\nMsgBox % \"Hotkeys &amp; hotstrings are now \" (A_IsSuspended ? \"disabled\" : \"enabled\")\nReturn\n\n\n#A::\nSuspend, Permit\nMsgBox I will run even when the script is suspended\nReturn\n<\/code><\/pre>\n<p>By default the script can also be paused\/suspended via its <a href=\"https:\/\/autohotkey.com\/docs\/commands\/Menu.htm#Icon\">tray icon menu<\/a> and a different tray icon is shown when toggled. Nothing is worse as you thinking your code doesn\u2019t work as expected when its not even running \ud83d\ude42<\/p>\n<h3 id=\"exit--exitapp\">Exit &amp; ExitApp<\/h3>\n<p>The <a href=\"https:\/\/www.autohotkey.com\/docs\/commands\/_Persistent.htm\"><code>#Persistent<\/code><\/a> directive will make a script not directly <code>Exit<\/code> after the auto-execute section. <code>Exit<\/code> merely exits the current thread. Use <code>ExitApp<\/code> to close the script completely.<\/p>\n<p>A script is automatically persistent when:<\/p>\n<ul>\n<li>It has defined hotkeys or hotstrings<\/li>\n<li>It sets NumLock, ScrollLock or CapsLock AlwaysOn or AlwaysOff<\/li>\n<\/ul>\n<p>Use <code>#Persistent<\/code> when you do not have any of the above but you do have timers or custom menu items.<\/p>\n<pre><code class=\"language-autohotkey\">; Control + Win + Alt + Pause: Emergency exit\n^#!Pause::\nSuspend, Permit\nExitApp\nReturn\n\n\n; Can register multiple OnExit\nOnExit(\"ExitFunc\")\n\nExitFunc(ExitReason, ExitCode)\n{\n  if ExitReason not in Logoff,Shutdown\n  {\n    MsgBox, 4, , Are you sure you want to exit?\n    IfMsgBox, No\n      return 1  ; Return non-zero to prevent exit.\n  }\n}\n<\/code><\/pre>\n<p><a href=\"https:\/\/www.autohotkey.com\/docs\/commands\/OnExit.htm\">ExitReasons<\/a>:<\/p>\n<ul>\n<li>Logoff: User logs off<\/li>\n<li>Shutdown: Computer shuts down (detect and abort a shutdown with <code>OnMessage(0x11, \"WM_QUERYENDSESSION\")<\/code>)<\/li>\n<li>Close: A <code>WM_CLOSE<\/code> or <code>WM_QUIT<\/code> message<\/li>\n<li>Error<\/li>\n<li>Menu: From the tray icon menu<\/li>\n<li>Commands: <code>Exit<\/code>, <code>ExitApp<\/code>, <code>Reload<\/code> and <a href=\"https:\/\/www.autohotkey.com\/docs\/commands\/_SingleInstance.htm\"><code>#SingleInstance<\/code><\/a><\/li>\n<\/ul>\n<h1 id=\"custom-scripts\">Custom Scripts<\/h1>\n<h2 id=\"autoreload-on-save\">Autoreload on save<\/h2>\n<p>Reload the Autohotkey script on save when working on it in your favourite editor.<\/p>\n<pre><code class=\"language-autohotkey\">; Trigger on Control + S\n; ~ = Also execute native function\n~^s::\n; Run even when script is suspended\nSuspend, Permit\n\n; Only in Sublime Text and Visual Studio Code\nif (!WinActive(\"ahk_class PX_WINDOW_CLASS\") and !WinActive(\"ahk_exe Code.exe\"))\n  return\n\n; Only when the script dir\/filename is in the titlebar\nWinGetActiveTitle, winTitle\nif (InStr(winTitle, A_Scriptdir) or InStr(winTitle, A_ScriptName))\n  Reload\n\n; Only when the top dir name is in the titlebar\nSplitPath, A_Scriptdir, topDir\nif (InStr(winTitle, topDir))\n  Reload\n\nreturn\n<\/code><\/pre>\n<h2 id=\"instahelp\">InstaHelp<\/h2>\n<p>Should your IntelliSense not cut it, open the online docs on the selected Autohotkey keyword with <code>Capslock + A<\/code>. If it doesn\u2019t match a keyword, google \u201cAutohotkey <em>selected text<\/em>\u201d.<\/p>\n<p><!-- TODO: Change code visualizer so that hiding parts of a code block is possible (all autohotkey commands list below) --> <\/p>\n<pre><code class=\"language-autohotkey\">Capslock &amp; A::\n; Get the currently selected text\n; (with some clipboard juggling:)\nold := clipboard\nclipboard =\nSend, ^c\nClipWait, 3\nneedle := clipboard\nclipboard := old\n\nahkCommands =\n( LTRIM\n  Break,Catch,Click,ClipWait,Continue,Control,ControlClick,ControlFocus,ControlGet,ControlGetFocus, ControlGetPos,ControlGetText,ControlMove, ControlSend,ControlSendRaw,ControlSetText,CoordMode,Critical, DetectHiddenText,Drive,DriveGet,DriveSpaceFree,Edit,Else,EnvAdd,EnvDiv,EnvGet, EnvMult,EnvSet,EnvSub, EnvUpdate,Exit,ExitApp,FileAppend,FileCopy,FileCopyDir,FileCreateDir,FileCreateShortcut,FileDelete, FileInstall,FileGetAttrib, FileGetShortcut,FileGetSize,fileGetVersion,FileMove,FileMoveDir,FileOpen, FileRead,FileReadLine,FileRecycle,FileRecycleEmpty,FileRemoveDir, FileSelectFile,FileSelectFolder, FileSetAttrib,FileSetTime,Finally,For,Format,FormatTime,GetKeyState,Gosub,Goto,GroupActive,GroupAdd, GroupClose,GroupDeactivate,Gui,GuiControl,GuiControlGet,Hotkey,if,IfEqual,IfNotEqual,IfExist,IfNotExist, IfGreater,IfGreaterOrEqual,IfInString, IfNotInString,IfLess,IfLessOrEqual,IfMsgBox,IfWinActive,IfWinNotActive, IfWinExist,IfWinNotExist,ImageSearch,IniDelete,IniRead,IniWrite,Input, InputBox,KeyHistory,KeyWait,ListHotkeys, ListLines,ListVars,Loop,Menu,MenuGetHandle,MenuGetName,MouseClick,MouseClickDrag,MouseGetPos,MouseMove,MsgBox, OnExit,OutputDebug,Pause,PixelGetColor,PixelSearch,PostMessage,Process,Progress,Random,RegDelete,RegRead,RegWrite, Reload,Return,Run,RunAs,RunWait,Send,SendRaw,SendInput,SendPlay,SendEvent,SendLevel,SendMessage,SendMode, SetBatchLines,SetCapsLockState,SetControlDelay,SetDefaultMouseSpeed,SetEnv,SetFormat,SetKeyDelay,SetMouseDelay, SetNumLockState,SetScrollLockState,SetregView,SetStoreCapsLockMode,SetTimer,SetTitleMatchMode,SetWinDelay, SetWorkingDir,Shutdown,Sleep,Sort,SoundBeep,SoundGet,SoundGetWaveVolume,SoundPlay,SoundSet,SoundSetWaveVolume, SplashImage,SplashTextOn,SplashTextOff,SplitPath,StatusBarGetText,StatusBarWait,StringCaseSense,StringLeft, StringRight,StringLower,StringReplace,StringSplit,StringTrimLeft,StringTrimRight,StringUpper,Suspend,SysGet, Thread,Throw,ToolTip,Transform,TrayTip,Until,UrlDownloadToFile,While,WinActivate,WinActivateBottom,WinClose, WinGetActiveStats,WinGetActiveTitle,WinGetClass,WinGet,WinGetPos,WinGetText,WinGetTitle,WinHide,WinKill,WinMaximize, WinMenuSelectItem,WinMinimize,WinMinimizeAll,WinMinimizeAllUndo,WinMove,WinRestore,WinSet,WinSetTitle,WinShow, WinWait,WinWaitActive,WinWaitClose,WinWaitNotActive,ClipboardTimeout,CommentFlag,Delimiter,DerefChar,ErrorStdOut, EscapeChar,HotkeyInterval,HotkeyModifierTimeout,Hotstring,Include,IncludeAgain,InputLevel,InstallKeybdHook, InstallMouseHook,LTrim,MaxHotkeysPerInterval,MaxMem,MaxThreads,MaxThreadsBuffer,MaxThreadsPerHotkey, MenuMaskKey,NoEnv,NoTrayIcon,Persistent,SingleInstance,UseHook,Warn,WinActivateForce\n)\n\nif (IsFunc(needle) or InStr(ahkCommands, needle)) {\n  Run https:\/\/autohotkey.com\/docs\/commands\/%needle%.htm\n} else {\n  Run, https:\/\/www.google.com\/search?q=autohotkey+%needle%\n}\nreturn\n<\/code><\/pre>\n<p>Script to <a href=\"https:\/\/www.autohotkey.com\/docs\/scripts\/ContextSensitiveHelp.htm\">open Autohotkey.chm instead<\/a>.<\/p>\n<h2 id=\"other\">Other<\/h2>\n<p><a href=\"https:\/\/www.autohotkey.com\/docs\/Variables.htm#ScriptHwnd\"><code>A_ScriptHwnd<\/code><\/a> contains the unique ID (HWND) of the script\u2019s hidden main window.<\/p>\n<ul>\n<li><a href=\"https:\/\/autohotkey.com\/board\/topic\/85201-array-deep-copy-treeview-viewer-and-more\/\">An object TreeViewer<\/a> and more<\/li>\n<li><a href=\"https:\/\/www.autohotkey.com\/boards\/viewtopic.php?f=6&amp;t=35124&amp;p=162979\">Array_Gui<\/a>: Show arrays as an interactive TreeView.<\/li>\n<li><a href=\"https:\/\/autohotkey.com\/board\/topic\/70490-print-array\/\">Print Array<\/a><\/li>\n<li><a href=\"https:\/\/www.autohotkey.com\/boards\/viewtopic.php?f=6&amp;t=64724&amp;p=277801\">A Console to log to<\/a><\/li>\n<li><a href=\"https:\/\/www.autohotkey.com\/docs\/scripts\/JoystickTest.htm\">Joystick Test Script<\/a>: Find out how to bind Jostick buttons<\/li>\n<li><a href=\"https:\/\/www.autohotkey.com\/docs\/scripts\/IntelliSense.htm\">Autohotkey IntelliSense<\/a>: If your editor has no intellisense, switch editors instead \ud83d\ude42<\/li>\n<\/ul>\n<h1>Extras<\/h1>\n<p><b>Other interesting reads<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/ahkscript\/awesome-AutoHotkey\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/ahkscript\/awesome-AutoHotkey.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/ahkscript\/awesome-AutoHotkey\">ahkscript\/awesome-AutoHotkey<\/a>: A curated list of awesome<\/li>\n<li><a href=\"https:\/\/github.com\/itenium-be\/Mi-Ke\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/itenium-be\/Mi-Ke.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/itenium-be\/Mi-Ke\">itenium-be\/Mi-Ke<\/a>: Mi-Ke contains most stuff in this blog post, and then some.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>If you are like me, you just started writing Authotkey scripts without ever really taking the time to learn the language properly. This blog post contains some scripts and tools to help you try make some sense of what is going on.<\/p>\n","protected":false},"author":1,"featured_media":2066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[19],"tags":[36,28,21],"class_list":["post-1562","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-productivity","tag-autohotkey","tag-debugging","tag-testing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Autohotkey Debugging - Itenium<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Autohotkey Debugging - Itenium\" \/>\n<meta property=\"og:description\" content=\"If you are like me, you just started writing Authotkey scripts without ever really taking the time to learn the language properly. This blog post contains some scripts and tools to help you try make some sense of what is going on.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/\" \/>\n<meta property=\"og:site_name\" content=\"Itenium\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-22T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-28T12:31:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/autohotkey-development-debugging.png\" \/>\n\t<meta property=\"og:image:width\" content=\"360\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Usdevelop\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Usdevelop\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/\",\"name\":\"Autohotkey Debugging - Itenium\",\"isPartOf\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/autohotkey-development-debugging.png\",\"datePublished\":\"2019-05-22T22:00:00+00:00\",\"dateModified\":\"2025-11-28T12:31:44+00:00\",\"author\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022\"},\"breadcrumb\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#primaryimage\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/autohotkey-development-debugging.png\",\"contentUrl\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/autohotkey-development-debugging.png\",\"width\":360,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/demo.sidekick.be\/itenium\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Autohotkey Debugging\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#website\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/\",\"name\":\"Itenium\",\"description\":\"We build software. We build careers.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/demo.sidekick.be\/itenium\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022\",\"name\":\"Usdevelop\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g\",\"caption\":\"Usdevelop\"},\"sameAs\":[\"https:\/\/demo.sidekick.be\/itenium\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Autohotkey Debugging - Itenium","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Autohotkey Debugging - Itenium","og_description":"If you are like me, you just started writing Authotkey scripts without ever really taking the time to learn the language properly. This blog post contains some scripts and tools to help you try make some sense of what is going on.","og_url":"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/","og_site_name":"Itenium","article_published_time":"2019-05-22T22:00:00+00:00","article_modified_time":"2025-11-28T12:31:44+00:00","og_image":[{"width":360,"height":300,"url":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/autohotkey-development-debugging.png","type":"image\/png"}],"author":"Usdevelop","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Usdevelop","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/","url":"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/","name":"Autohotkey Debugging - Itenium","isPartOf":{"@id":"https:\/\/demo.sidekick.be\/itenium\/#website"},"primaryImageOfPage":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#primaryimage"},"image":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#primaryimage"},"thumbnailUrl":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/autohotkey-development-debugging.png","datePublished":"2019-05-22T22:00:00+00:00","dateModified":"2025-11-28T12:31:44+00:00","author":{"@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022"},"breadcrumb":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#primaryimage","url":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/autohotkey-development-debugging.png","contentUrl":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/autohotkey-development-debugging.png","width":360,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/productivity\/autohotkey-debugging\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/demo.sidekick.be\/itenium\/"},{"@type":"ListItem","position":2,"name":"Autohotkey Debugging"}]},{"@type":"WebSite","@id":"https:\/\/demo.sidekick.be\/itenium\/#website","url":"https:\/\/demo.sidekick.be\/itenium\/","name":"Itenium","description":"We build software. We build careers.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/demo.sidekick.be\/itenium\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022","name":"Usdevelop","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g","caption":"Usdevelop"},"sameAs":["https:\/\/demo.sidekick.be\/itenium"]}]}},"_links":{"self":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/comments?post=1562"}],"version-history":[{"count":2,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1562\/revisions"}],"predecessor-version":[{"id":2198,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1562\/revisions\/2198"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/media\/2066"}],"wp:attachment":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/media?parent=1562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/categories?post=1562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/tags?post=1562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}