如何在WinDbg中配置“脚本”搜索路径?

时间:2019-07-31 16:29:52

标签: windbg

是否有脚本搜索路径?

我想在WinDbg中使用JavaScript(通过jsprovider.dll)(实际上是CDB)。似乎我必须将脚本放入要从中启动调试器的目录中,或者在调用调试器时包括脚本的完整路径。有其他选择吗?

  • 是否有任何脚本搜索路径?
  • 您可以在变量中保存路径(目录名)并与.scriptload一起使用吗?
  • 脚本有没有办法知道它在哪里? (我的脚本包含在版本控制软件中,因此它们很容易出现在任何地方,而不是我想要硬编码的地方。)
    • 我想让脚本“包括”其他脚本。

我尝试了所有这些事情都没有成功。 Javascript Debugger Scripting文档点无法直接回答我的问题。

.scriptload失败

.scriptload

  

可以使用绝对或相对路径。相对路径是相对于您在其中启动调试器的目录的。不支持包含空格的文件路径。

它没有列出选项或替代项。

我尝试使用“变量”没有成功。您可以在“变量”中存储非数字值吗?我曾尝试在此处进行复制/粘贴,但尝试时很丑陋,但我只是在猜测语法,因此可能无济于事。

部分成功,但取得成功

完成我想要的发现的唯一方法是将调试器脚本包装在cmd脚本中,并使其使用%~dp0来构建要加载的所有脚本文件的绝对路径。

cdb.exe -c ".load jsprovider.dll;.scriptload %~dps0mylib.js;.scriptload %~dps0this_script.js;$<%~dp0this_script.scr" MyApp /arg1 /arg2

我通常更喜欢将jsprovider和脚本加载到“ .scr”(windbg脚本)中,但是我不知道如何在其中获取任何环境信息(目录等)。

有更好的方法吗?

1 个答案:

答案 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