为了遍历本机对象,我可以将其存储在windbg变量中,然后对windbg中的字段进行linq
查询以筛选相关对象。
> dx @$usedSessions = (*((FabricRuntime!std::unordered_map<unsigned __int64,std::shared_ptr<Store::EseLocalStore::EsePoolItem>,std::hash<unsigned __int64>,std::equal_to<unsigned __int64>,std::allocator<std::pair<unsigned __int64 const ,std::shared_ptr<Store::EseLocalStore::EsePoolItem> > > > *)0x1dfff35f1a8))
> dx @$usedSessions.Take(2).Select(s => s.second->session_->sessionId_)
但dx
命令的sos
windbg命令失败:
0:045> dx @$Txs = !dumpheap -live -type System.Fabric.Transaction
Error: Unexpected token at 'System.Fabric.Transaction'
我可以在windbg中使用Linq遍历托管对象吗?
如果您不喜欢WinDbg .foreach
循环与!dumpheap -short
一起使用,我能想到的最接近的是NetExt WinDbg Extension。
可以像这样使用
!wfrom -type *.HttpContext
where ( ($contains(_request._url.m_String, "http:")) && (_response._statuscode != 0n200) )
select $addr(), _request._url.m_String, _response._statusCode
来源:NetExt文档示例