如何在 windbg 脚本中并行执行命令?
How can I execute commands in parallel in a windbg script?
我有一个用 JavaScript 编写的 windbg 脚本,它从内存转储中获取所有方法表。我怎样才能异步发出 ExecuteCommand 以便它们并行发生?目前的for循环需要两个小时! (我们有一个巨大的应用程序)
我试过 promises 但它不支持它们。我试过 yield 但它似乎仍然需要两个小时,就好像 ExecuteCommand 正在阻塞一样。任何帮助表示赞赏!谢谢!
不幸的是,大部分调试引擎本质上都是单线程的。没有办法并行执行多个命令。根据定义,ExecuteCommand 桥会 "block" 直到命令完成,因为它将在执行该命令期间捕获所有调试器输出,并 return 将其作为字符串数组返回给调用者。
恕我直言,这是不可能的。
但是,您可以尝试分而治之的方法,同时打开 x 个转储,运行 1/xth 每次转储上的命令并汇总结果。
如果你有机会拆分命令,这应该是可行的。
示例:
- 而不是
x *!*
你可以 运行 命令 x *!a*
、x *!b*
等在 26 个并行转储上。
- 而不是
!for_each_thread "command"
你可以 运行 command
在转储中有多少线程就多少转储。
我有一个用 JavaScript 编写的 windbg 脚本,它从内存转储中获取所有方法表。我怎样才能异步发出 ExecuteCommand 以便它们并行发生?目前的for循环需要两个小时! (我们有一个巨大的应用程序)
我试过 promises 但它不支持它们。我试过 yield 但它似乎仍然需要两个小时,就好像 ExecuteCommand 正在阻塞一样。任何帮助表示赞赏!谢谢!
不幸的是,大部分调试引擎本质上都是单线程的。没有办法并行执行多个命令。根据定义,ExecuteCommand 桥会 "block" 直到命令完成,因为它将在执行该命令期间捕获所有调试器输出,并 return 将其作为字符串数组返回给调用者。
恕我直言,这是不可能的。
但是,您可以尝试分而治之的方法,同时打开 x 个转储,运行 1/xth 每次转储上的命令并汇总结果。
如果你有机会拆分命令,这应该是可行的。
示例:
- 而不是
x *!*
你可以 运行 命令x *!a*
、x *!b*
等在 26 个并行转储上。 - 而不是
!for_each_thread "command"
你可以 运行command
在转储中有多少线程就多少转储。