2012-09-12 44 views

回答

1

不確定是否!dumpheap支持該字符串。您始終可以使用.logopen將輸出重定向到文件並對其進行後處理。對於更優雅的(因此更復雜的)解決方案,您還可以使用.shell將命令輸出重定向到shell進程進行解析。這裏有一個例子:

http://blogs.msdn.com/b/baleixo/archive/2008/09/06/using-shell-to-search-text.aspx

您還可以看到.shell文檔瞭解更多信息:

http://msdn.microsoft.com/en-us/library/windows/hardware/ff565339(v=vs.85).aspx

+0

我希望看看我們是否可以使用.foreach form!DumpHeap輸出,只打印出包含指定字符串的字符串。 – imasud

+0

我試圖使用.shell,它適用於短字符串。對於長字符串,它受到'!do'命令的有限字符串輸出或'du'命令的換行符的影響。在沒有SOSEX的情況下查看我的答案。這是我的.shell命令:'.shell -ci「.foreach(string {!dumpheap -short -type System.String}){du/c80 $ {string} + c L80}」find「mySearchTerm」' –

3

使用sosex.strings。請參閱!sosex.help以獲取根據內容和/或長度過濾字符串的選項。

4

使用sosex代替sos進行此操作。它有一個!strings命令,它允許您使用/m:<filter>選項來過濾字符串。

0

如果你真的想要去沒有SOSEX,然後嘗試

.foreach (string {!dumpheap -short -type System.String}) { .foreach (search {s -u ${string}+c ${string}+c+2*poi(${string}+8) "mySearchTerm"}) { du /c80 ${string}+c }} 

它採用

  • !dumpheap得到的.NET堆的所有字符串
  • .foreach遍歷他們
  • s搜索子字符串
  • 。再次查找是否找到了某物
  • 一些偏移量計算得到字符串的第一個字符(+ c)和字符串長度(+8)(乘以2得到字節而不是字符)。那些需要適應64位應用的情況下

/c80只是爲了更好的輸出。如果你喜歡字符串的.NET細節,你也可以使用!do ${string}而不是du /c80 ${string}+c