Tag Archives: WinDbg

Azure Web Apps: Získání memory-dumpu procesu (Web, WebJob)

Pro hlubší diagnostiku je někdy potřeba získat memory-dump procesu. Ukážeme si teď, že to jde i z Azure Web Apps (WebSites), včetně jejich WebJobs.

Kudu Process Explorer

Nejjednodušší situaci máme, pokud chceme získat aktuální memory-dump 64-bitového procesu. Stačí otevřít management-site Kudu (to je ten webík, který najdete na adrese https://yoursitename.scm.azurewebsites.net), v Process Exploreru pravým tlačítkem myši otevřít kontextové menu příslušného procesu (kromě w3wp.exe jsou tam i WebJoby) a z něj vybrat Download Memory Dump:

image

…memory-dump se začne po chvilce (někdy i po několika minutách!) stahovat.

Kudu Debugging Console + ProcMon ze SysInternals

Nejobvyklejší komplikací je, pokud nám na 64-bitovém stroji (App Service Plan) běží 32-bitový proces (což je pro Azure Web Apps poměrně obvyklé, chceme šetřit vzácnou pamětí). Výše popsaný postup přes Process Explorer nám vytvoří 64-bitový dump 32-bitového procesu, s kterým mnoho muziky nenaděláte, byť třeba Visual Studio si s ním celkem poradí (stejný problém, jako když použijete pro vytvoření dumpu 64-bitový TaskManager).

Naštěstí Kudu má kromě Process Exploreru i Debug Console – CMD i PowerShell. Navíc v cestě D:\devtools\sysinternals\ najdete na WebApps stroji předinstalované utility SysInternals vč. ProcDump (dříve bývalo potřeba ProcDump stáhnout, ale už ani to není potřeba).

image

Je zde opět jedna záludnost. ProcDump je potřeba spouštět s přepínačem -accepteula, protože jinak se při svém prvním spuštění dožaduje akceptace EULA v GUI (což nevidíte), a dokud licenční smlouvu neakceptujete, otravuje s tím stále (což se v konzoli projevuje tím, že ProcDump nic nedělá).

ProcDump lze samozřejmě použít kromě prostého získání aktuálního dumpu i v mnoha pokročilejších scénářích – obdobně jako DebugDiag mu lze říci podmínky, na jejich splnění má čekat a dump vytvořit. Viz ProcDump reference.

.NET Memory Internals & Advanced Debugging – záznam, dema a slides [WUG Brno 05/2016]

Slides a dema z mé přednášky pro WUG Brno z 31.5.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • StackOverflow troubleshooting
  • Stack
  • Windows Debugger, SOS, DebugDiag
  • Heap
  • Garbage Collector
  • Prozkoumávání haldy, rootů, finalization queue
  • GC Root identification (static fields)
  • Debugging dema

Advanced Debugging Stories .NET – záznam, dema a slides [WUG Praha 4/2016]

Slides a dema z mé přednášky pro setkání WUG Praha z 12.4.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata a nástroje

  • Windows Debugger + SOS.dll extension
  • Memory Dump Analysis, Crash Dump Analysis
  • DebugDiag, ClrProfiler
  • Microsoft Diagnostics Runtime
  • Stack analysis
  • Heap analysis, Garbage Collection, Finalization
  • StackOverflow

[ASP].NET Worst Practices – záznam, slides a dema [Prague .NET Meetup 02/2016]

Slides a dema z mé přednášky pro setkání Prague .NET Meetup ze 17.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • Garbage Collector, Finalization, C# Destructors, Resource Wrapper pattern
  • Process Failure, StackOverflow, Windows Debugger, DebugDiag
  • <compilation debug=“true|false“ />, <deployment retail=“true“/>
  • ASP.NET Over-posting / Mass-assignment
  • skládání stringů vs. StringBuilder
  • vyhledávání v datech – List vs. BinnarySearch vs. Dictionary vs. LINQ ToLookup()
  • perly code-review

Advanced Debugging .NET – záznam, slides a dema [ShowIT SK 02/2016]

Slides a dema z mé přednášky pro konferenci Gopas ShowIT Bratislava z 10.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • StackOverflow troubleshooting
  • Windows Debugger, SOS, DebugDiag
  • Prozkoumávání zásobníku
  • Prozkoumávání haldy, rootů, finalization queue
  • GC Root identification (static fields)

Advanced Debugging Stories – záznam, slides a dema [MS Fest Praha 11/2015]

Slides a dema z mé přednášky pro konferenci MS Fest Praha z 29.11.2015.

Záznam je publikován na našem HAVIT YouTube Channelu:

Dotčená témata

  • Windows Debugger – SOS.dll
  • DebugDiag – Collection, Analysis
  • StackOverflowException
  • Stack analysis
  • instalace a zprovoznění WinDbg
  • získání memory-dumpu
  • Heap analysis
  • Finalize Queue, F-reachable Queue
  • Garbage Collector
  • rootování, GCRoot
  • statické fieldy

WinDbg: Trvalá změna výchozího fontu popř. dalších nastavení

WinDbg (Windows Debugger) má svá specifika. Představuji si to asi tak, že když už byl příslušný tým v Microsoftu po několika marných pokusech dotlačen k vytvoření GUI nad konzolovou podobou (jedinou pravověrnou), rozhodl se to udělat tak, aby vzniklá GUI nadstavba opravdu nikoho nelákala se do debuggingu na této nízké úrovni pokoušet.

Jedním ze specifik tak například je, že zatímco v každé jiné aplikaci pokud změníte velikost písma a podobné volby UI, pamatuje si to aplikace i do příštího spuštění, aniž byste to museli nějak řešit.

Ve WinDbg tomu tak není.

Dlouho jsem si dokonce myslel, že to nějak souvisí s novými vymoženostmi ve Windows ála UAC, které nedovolí zastaralému WinDbg uložit nastavení do Program Files nebo nějakého jiného chráněného místa, kam si natavení chce persistovat.

Není tomu tak.

Windows Debugger totiž má logiku svojí – konkrétní nastavení UI je zabaleno do podoby Workspace (mimo fontu je tam i layout oken a spousta dalších věcí). Workspaces můžeme mít více a můžeme mezi nimi přepínat (mimochodem VS2015 přišlo s layouty, implementováno však příčetněji).

Záludnost je v tom, že výchozí nastavení WinDbg má vypnuté ukládání změn Workspace. Tedy cokoliv nastavíme, tak se vypnutím WinDbg zapomene, aniž by se to na cokoliv zeptalo. Mám dokonce pocit, že toto se v průběhu verzí muselo změnit, protože kdysi se mě WinDbg při ukončování na změnu Workspace ptal.

Jak tedy font změnit, aby si to WinDbg do příště zapamatoval?

  1. Otevřeme WinDbg (neotevíráme žádný dump ani jinou debugging session).
  2. V Menu File zvolíme Save Workspace (změna by se měla uložit do default Workspace).
  3. Vystoupit, nastoupit, font by se měl pamatovat.

Změna se kupodivu projeví i v X64 i X86 verzi WinDbg.

Pokud by to kladlo nějaký odpor

  • Přes View / Options / Worspace Prompts = Always Ask povolíme dotazy na uložení změn Workspace
  • Přes File / Delete Workspaces… můžeme vyházet nežádoucí workspaces (klidně všechny :-))

…mno, jak jednoduché, už nebudu muset s každým spuštěním znovu nastavovat font přiměřený své slepotě, resp. vhodný pro prezentaci.