我想在WinDbg中使用JavaScript(通过jsprovider.dll)(实际上是CDB)。似乎我必须将脚本放入要从中启动调试器的目录中,或者在调用调试器时包括脚本的完整路径。有其他选择吗?
.scriptload
一起使用吗?我尝试了所有这些事情都没有成功。 Javascript Debugger Scripting文档点无法直接回答我的问题。
可以使用绝对或相对路径。相对路径是相对于您在其中启动调试器的目录的。不支持包含空格的文件路径。
它没有列出选项或替代项。
我尝试使用“变量”没有成功。您可以在“变量”中存储非数字值吗?我曾尝试在此处进行复制/粘贴,但尝试时很丑陋,但我只是在猜测语法,因此可能无济于事。
完成我想要的发现的唯一方法是将调试器脚本包装在cmd脚本中,并使其使用%~dp0
来构建要加载的所有脚本文件的绝对路径。
cdb.exe -c ".load jsprovider.dll;.scriptload %~dps0mylib.js;.scriptload %~dps0this_script.js;$<%~dp0this_script.scr" MyApp /arg1 /arg2
我通常更喜欢将jsprovider和脚本加载到“ .scr”(windbg脚本)中,但是我不知道如何在其中获取任何环境信息(目录等)。
有更好的方法吗?
答案 0 :(得分:2)
打开命令提示符并设置一个临时环境变量
或使用MyComputer Properties并设置一个永久的Environment变量,然后在windbg / cdb / kd内部使用它
下面显示的是临时环境变量的用法
C:\>set w
windir=C:\Windows
C:\>set WINDBG_SCRIPT_DIR=f:\zzzz\wdscript
C:\>set w
WINDBG_SCRIPT_DIR=f:\zzzz\wdscript
windir=C:\Windows
C:\>cdb cdb
Microsoft (R) Windows Debugger Version 10.0.17763.132 AMD64
(1d9c.231c): Break instruction exception - code 80000003 (first chance)
ntdll!LdrpDoDebuggerBreak+0x30:
00007ff9`cb042dbc cc int 3
0:000> as /e foo WINDBG_SCRIPT_DIR
0:000> al
Alias Value
------- -------
foo f:\zzzz\wdscript
0:000> .scriptload ${foo}\mojo.js
JavaScript script successfully loaded from 'f:\zzzz\wdscript\mojo.js'
0:000> dx @$scriptContents.hola_mojo()
hola mojo this is javascript