在windbg断点命令中调用javascript函数
我有一个关于执行的windbg问题 将javascript函数的。 该观察结果在windbg预览版10.0.17030.1002中进行 在windbg的最新版本中也是如此 在Windows 10上调试本地X86 C++程序时, 测试设置 在我的javascript文件dbg_test.js中,我有以下功能:在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
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”手动恢复执行
问题
致以亲切/良好的问候 我遇到了和你一样的问题。通过声明一个脚本全局变量,我在某种程度上绕过了这个问题
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但从未得到反馈。