使用脚本在 windbg 中设置断点

setting a breakpoint in windbg using a script

我想在 windbg 中创建一个脚本,在 System.Windows.Forms.Application+MarshalingControl..ctor 中设置一个断点,当遇到该断点时,它只是将堆栈跟踪转储到我打开的日志文件中.

我正在使用 sos 扩展程序的 !Name2EE 命令获取 JITTED 代码地址,但我仍然无法从返回的内容中获取确切地址:

.block{.shell -ci "!Name2EE *!System.Windows.Forms.Application+MarshalingControl..ctor" FIND "JITTED Code Address:"}

但是这个returns:JITTED Code Address: 63348434 我只想获得地址号码本身。

有什么建议吗?

获取 jitted 地址

你可以用 .foreach 包围它,它通过使用 /pS 3(初始跳过)吃掉单词 JITTED Code Address: 并通过 /ps 3 吃掉 .shell: Process exited(跳过):

我试过

0:000> .foreach /pS 3 /ps 3 (var {.shell -ci ".echo JITTED Code Address: 63348434" FIND "JITTED Code Address:"}) {.echo ${var}}
63348434

你应该使用

.block{.foreach /pS 3 /ps 3(var {.shell -ci "!Name2EE *!System.Windows.Forms.Application+MarshalingControl..ctor" FIND "JITTED Code Address:"}) {.echo ${var}}}

然后将 .echo ${var} 更改为您喜欢的地址。

注意边缘情况:该方法可能还没有被调试。

托管断点

我有点想知道你为什么要在 jitted 地址上放置一个断点,为什么 托管断点对你不起作用。您尝试过 !mbm!mbp 了吗?