Windbg Linq для управляемых объектов - PullRequest
0 голосов
/ 29 апреля 2020

Для перебора собственных объектов я могу сохранить его в переменной windbg, а затем выполнить linq запросов к полям в windbg для фильтрации по интересующим объектам.

>  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 windbg не выполняется для sos команды:

0:045> dx @$Txs = !dumpheap -live -type System.Fabric.Transaction
Error: Unexpected token at 'System.Fabric.Transaction'

Могу ли я перебрать управляемые объекты с помощью Linq в windbg?

1 Ответ

0 голосов
/ 30 апреля 2020

Если вам не нравится WinDbg .foreach l oop в сочетании с !dumpheap -short, самое близкое, о чем я могу подумать, это расширение NetExt WinDbg .

It можно использовать как

!wfrom -type *.HttpContext 
  where ( ($contains(_request._url.m_String, "http:")) && (_response._statuscode != 0n200) ) 
  select $addr(), _request._url.m_String, _response._statusCode

Источник: пример документации NetExt

...