Seifert, DominikDominikSeifertWan, MichaelMichaelWanYUNG-JEN HSUYeh, BensonBensonYeh2023-04-202023-04-202022-01-01978166549590502705257https://scholars.lib.ntu.edu.tw/handle/123456789/630386Asynchronous JavaScript has become omnipresent, yet is inherently difficult to reason about. While many recent debugging tools are trying to address this issue with (semi-)automatic methods, interactive analysis tools are few and far between. To this date, developers are required to build mental models of complex concurrent control flows with little to no tool support. Thus, asynchrony is making life hard for novices and catches even seasoned developers off-guard, especially when dealing with unfamiliar code. That is why we propose the Asynchronous Call Graph. It is the first approach to capture and visualize concurrent control flow between call graph roots. It is also the first concurrency analysis tool for JavaScript that is fully interactive and integrated with an omniscient debugger in a popular IDE. First tests show that the ACG works successfully on real-world codebases. This approach has the potential to set a new standard for how developers can analyze asynchrony.asynchrony; call graph; debugging; dynamic analysis; JavaScriptConcurrency control; Data flow analysis; Flow graphs; High level languages; Analysis tools; Asynchronous Javascript; Asynchrony; Call graphs; Concurrent control; Control-flow; Debugging; Debugging tools; Dynamics analysis; Javascript; Program debuggingAn Asynchronous Call Graph for JavaScriptconference paper10.1109/ICSE-SEIP55303.2022.97940572-s2.0-85132797007https://api.elsevier.com/content/abstract/scopus_id/85132797007