javascript - 在 windbg 断点命令中调用 javascript 函数

标签 javascript c++ debugging windbg breakpoints

我有一个关于执行的 windbg 问题 作为断点命令的 javascript 函数。 此观察是在 windbg 预览版 10.0.17030.1002 中进行的 以及最近版本的 windbg 在 Windows 10 上调试 native x86 C++ 程序时。

测试设置

在我的 javascript 文件 dbg_test.js 中,我有以下函数:

function test()
{
   var ctl = host.namespace.Debugger.Utility.Control;
   host.diagnostics.debugLog(">>> Test\n");
   ctl.ExecuteCommand("g");
}

在 windbg 中,我加载 javascript-provider,加载我的 dbg_test.js 脚本 并定义一个断点命令来调用这个 javascript 函数:

  bs 0 "dx @$scriptContents.test()"

预期行为

字符串“>>> Test”显示在命令窗口的输出 Pane 中 每次 遇到断点 0 时。 调试器恢复执行。

观察到的行为

输出“>>> 测试”仅在第一次显示 当命中断点 0 时。 随后命中断点 0 不 产生任何输出。

备注

1) 使用“旧式”windbg-commands 进行类似测试效果很好:

bs 0 ".printf \">>> Test\\n\\n\";g;"

结束并重新启动 windbg 之后

2) 当我将函数“test”的代码移动到函数“invokeScript()”并通过以下方式定义断点命令时,会显示相同的行为

bs 0 ".scriptrun d:\\dbg_scripts\\dbg_test.js"

3) 从 windbg 命令行运行脚本。

4) 在上面的测试场景中调用 javascript 函数在以前版本的 windbg 中有效。

5) 好像声明

ctl.ExecuteCommand("g");

是关键:如果我注释掉这条语句,那么断点 每次都被命中,

的输出
host.diagnostics.debugLog(">>> Test\n");

在断点的每次命中时显示。 当然,我必须通过按 F5 或输入命令“g”手动恢复执行

问题

  1. 有人可以重现这个问题吗?
  2. 以这种方式使用 javascript 函数是否合法,还是我做错了什么?

非常感谢您的反馈!

亲切的问候!

最佳答案

我遇到了和你一样的问题。通过声明一个脚本全局变量,我能够在某种程度上绕过这个问题

var lines = [];

并将日志消息推送到这个数组而不是调试打印它们:

lines.push(">>> Test");

为了看到线条,我创建了一个函数

function print_lines() {
   for (var line of lines) {
      host.diagnostics.debugLog(line + "\n");
   }
   lines = [];
}

我是这样从提示中调用的

dx @$scriptContents.print_lines();

我知道这并没有真正回答您的问题,但它可能对面临同样问题的其他人有所帮助。

关于javascript - 在 windbg 断点命令中调用 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47715274/

相关文章:

javascript - 将图像 src 与正则表达式匹配直到出现空格 - Javascript

javascript - Angular 2 依赖项

javascript - 如何从 RCP 中的文本字段中提取值并将其放入 Javascript 代码中?

java - C++ 映射冲突解决作为 java HashMap

.net - 适用于 .NET 的 Visual Studio 调试器提示和技巧

c - 如何在 GCC 中编译 C 程序以在 WinDbg 中启用调试?

javascript - 递归地分割包含html元素的字符串并在javascript中获取特定值

c++ - 直线下的二维点

c++ - 在 SDL 中显示 PNG?

c# - 是否可以在执行期间更改变量的值?