xxb*_*bcc 3 asp.net clr memory-leaks windbg crash-dumps
我试图提出一个WinDbg命令行表达式,该表达式使用!DumpHeap命令的输出,并且对于每个地址,从0x08地址后的offset读取一个64位值。我认为这是可能的(不确定),但是到目前为止,我所做的每一次尝试都失败了,并出现了一些错误。
我进行了很多搜索,但是大多数WinDbg文章都显示了一些简单的示例,我可以尝试但尝试失败。
我有一个ASP.NET辅助进程的进程转储。该过程有一定的内存增长,但是没有明确的违规者,因此我试图列出在内存中出现多次的许多对象。我将sos.dll用于托管调试WinDbg扩展。
这就是我想要做的
.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{r @$t0=poi(myaddress+0x8);!do @$t0;.echo ************* myaddress}
Run Code Online (Sandbox Code Playgroud)
请注意,以上命令必须在一行上-我仅在此处添加了换行符以提高可读性。
对于上述行,WinDbg将显示以下错误:Couldn't resolve error at 'myaddress+0x8);!do @$t0;.echo ************* 00000001003cb870'。
我正在尝试遍历返回的所有地址!DumpHeap-每个地址都应放入myaddress变量中。然后,对于每个地址,我试图将$t0用户寄存器设置为从中读取的值myaddress+0x8。然后,!do(!DumpObject)命令将对象转储到该地址。
如果仅运行(再次在WinDbg的一行中):
.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{!do myaddress;.echo ************* myaddress}
Run Code Online (Sandbox Code Playgroud)
我得到了对象转储的列表,但这比我需要的高一个级别。我想更深入地钻取一层并转储我正在迭代的这些顶级对象的特定成员。
这可能吗,还是我走错了路?
进一步搜索后,我发现我使用了错误的语法。根据问题和对MSDN的说法,变量名必须用空格包围或必须包含在其中${...}才能起作用。使用${}机箱后,脚本开始工作。
供以后参考,下面是运行脚本的方法(将其保留在WinDbg中的一行):
.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{r @$t0=poi(${myaddress}+0x8);!do @$t0;.echo ************* myaddress}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |