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

在windbg断点命令中调用javascript函数,javascript,c++,debugging,windbg,breakpoints,Javascript,C++,Debugging,Windbg,Breakpoints,我有一个关于执行的windbg问题 将javascript函数的。 该观察结果在windbg预览版10.0.17030.1002中进行 在windbg的最新版本中也是如此 在Windows 10上调试本地X86 C++程序时, 测试设置 在我的javascript文件dbg_test.js中,我有以下功能: function test() { var ctl = host.namespace.Debugger.Utility.Control; host.diagnostics.deb

我有一个关于执行的windbg问题 将javascript函数的。 该观察结果在windbg预览版10.0.17030.1002中进行 在windbg的最新版本中也是如此 在Windows 10上调试本地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提供程序,加载我的dbg_test.js脚本 并定义一个断点命令来调用此javascript函数:

function test()
{
   var ctl = host.namespace.Debugger.Utility.Control;
   host.diagnostics.debugLog(">>> Test\n");
   ctl.ExecuteCommand("g");
}
  bs 0 "dx @$scriptContents.test()"
预期行为 字符串“>>>Test”显示在命令窗口的输出窗格中 每次命中断点0时。 调试器将恢复执行

观察到的行为 输出“>>>测试”仅第一次显示 当达到断点0时。 随后命中断点0不起作用 生产任何产品

评论 1) 使用“旧式”windbg命令进行类似测试效果良好:

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”手动恢复执行

问题
  • 有人能重现这个问题吗
  • 以这种方式使用javascript函数合法吗?还是我在这里做错了什么
  • 非常感谢您的反馈


    致以亲切/良好的问候

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

    var lines = [];
    
    并将日志消息推送到该阵列,而不是调试打印它们:

    lines.push(">>> Test");
    
    为了查看这些行,我创建了一个函数

    function print_lines() {
       for (var line of lines) {
          host.diagnostics.debugLog(line + "\n");
       }
       lines = [];
    }
    
    我在提示下这样叫

    dx @$scriptContents.print_lines();
    

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

    发送gc应该可以,而且它也有文档记录。它在14951年对我起作用,但在16299年不起作用,因此它似乎是一个bug,请尝试报告给我windbgfb@microsoft.com@布拉布:你的评论是绝对正确的,谢谢你验证这个问题的存在在最近的windbg版本中。我已经将问题发布到windbgfb@microsoft.com但从未得到反馈。