.scriptdebug(调试 JavaScript)

使用 scriptdebug 命令调试 JavaScript 脚本。

.scriptdebug FileName

parameters

FileName

指定要调试的调试器 JavaScript 脚本的名称。

环境

模式

all

目标

all

平台

all

其他信息

有关 JavaScript 调试的概述,请参阅 Javascript 调试器脚本-Javascript 调试

注意

若要对 WinDbg Preview 使用 JavaScript 调试,请以管理员身份运行调试器。

备注

在调试 JavaScript 之前,请完成以下步骤。

  1. 加载示例脚本。

    0:000> .scriptload C:\MyScripts\DebuggableSample.js
    

若要开始主动调试脚本,请使用 scriptdebug 命令。

0:000> .scriptdebug C:\MyScripts\DebuggableSample.js
>>> ****** DEBUGGER ENTRY DebuggableSample ******
           No active debug event!

>>> Debug [DebuggableSample <No Position>] >

看到提示符 >>> Debug [DebuggableSample <No Position>] > 和输入请求后,就会进入脚本调试程序中。

使用 . help 命令或 可在 JavaScript 调试环境中显示命令列表。

>>> Debug [DebuggableSample <No Position>] >.help
Script Debugger Commands (*NOTE* IDs are **PER SCRIPT**):
    ? .................................. Get help
    ? <expr>  .......................... Evaluate expression <expr> and display result
    ?? <expr>  ......................... Evaluate expression <expr> and display result
    |  ................................. List available scripts
    |<scriptid>s  ...................... Switch context to the given script
    bc \<bpid\>  ......................... Clear breakpoint by specified \<bpid\>
    bd \<bpid\>  ......................... Disable breakpoint by specified \<bpid\>
    be \<bpid\>  ......................... Enable breakpoint by specified \<bpid\>
    bl  ................................ List breakpoints
    bp <line>:<column>  ................ Set breakpoint at the specified line and column
    bp <function-name>  ................ Set breakpoint at the (global) function specified by the given name
    bpc  ............................... Set breakpoint at current location
    dv  ................................ Display local variables of current frame
    g  ................................. Continue script
    gu   ............................... Step out
    k  ................................. Get stack trace
    p  ................................. Step over
    q  ................................. Exit script debugger (resume execution)
    sx  ................................ Display available events/exceptions to break on
    sxe <event>  ....................... Enable break on <event>
    sxd <event>  ....................... Disable break on <event>
    t  ................................. Step in
    .attach <scriptId>  ................ Attach debugger to the script specified by <scriptId>
    .detach [<scriptId>]  .............. Detach debugger from the script specified by <scriptId>
    .frame <index>  .................... Switch to frame number <index>
    .f+  ............................... Switch to next stack frame
    .f-  ............................... Switch to previous stack frame
    .help  ............................. Get help

事件

使用 sx 脚本调试器命令可以查看可以捕获的事件列表。

>>> Debug [DebuggableSample <No Position>] >sx              
sx                                                          
    ab  [   inactive] .... Break on script abort            
    eh  [   inactive] .... Break on any thrown exception    
    en  [   inactive] .... Break on entry to the script     
    uh  [     active] .... Break on unhandled exception     

使用 sxe script 调试器命令启用任何中断行为。 例如,若要在输入时启用中断,以便在脚本调试器中的任何代码执行时,脚本将捕获到脚本调试器中,请使用此命令。

>>> Debug [DebuggableSample <No Position>] >sxe en          
sxe en                                                      
Event filter 'en' is now active                             

使用 sxd script 调试器命令可以禁用任何断点行为。

>>> Debug [DebuggableSample 34:5] >sxd en                                                                              
sxd en                                                                                                                 
Event filter 'en' is now inactive                                                                                      

堆栈跟踪

使用 k 命令显示堆栈跟踪。

>>> Debug [DebuggableSample 34:5] >k                                                  
k                                                                                     
    ##  Function                         Pos    Source Snippet                        
-> [00] throwAndCatch                    034:05 (var curProc = host.currentProcess)   
   [01] outer                            066:05 (var foo = throwAndCatch())           
   [02] outermost                        074:05 (var result = outer())                

枚举变量

使用 ?? 枚举 JavaScript 变量的值。

>>> Debug [DebuggableSample 34:5] >??someObj                
??someObj                                                   
someObj          : {...}                                    
    __proto__        : {...}                                
    a                : 0x63                                 
    b                : {...}                                

断点

使用以下断点命令处理其他断点。

bp < bpid >:设置断点

bd < bpid >:禁用断点

应为 < bpid >:启用断点

bc < bpid >:清除断点

bpc:在当前行上设置断点

bl:列出断点 ()

Flow 控制-导航

使用以下命令在脚本中向前移动。

p:逐过程

t:单步执行

g:继续编写脚本

gu:跳出

文本框

使用以下命令来处理框架。

。帧 < 索引 >:切换到帧号 < 索引>

。 f +:切换到下一个堆栈帧

。 f +:切换到上一个堆栈帧

Quiting

使用 detach 命令分离 JavaScript 调试器。

>>> Debug [DebuggableSample 34:5] >.detach                  
.detach                                                     
Debugger has been detached from script!                     

使用 q 命令退出 JavaScript 调试器。

>>> Debug [<NONE> ] >q                                      
q