2015-07-29 19 views
9

Quando si utilizza Process Explorer per analizzare un'applicazione ASP.NET MVC in un ambiente di produzione che esegue IIS, ho notato un sacco di chiamate a questa funzione CopyPDBs da C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll:Cosa sta facendo questa funzione di CopyPDBs (da clr.dll)?

Process Explorer CopyPDBs

Tutti loro stanno avendo la stessa analisi dello stack:

ntdll.dll!ZwWaitForSingleObject+0xa 
KERNELBASE.dll!WaitForSingleObjectEx+0x98 
clr.dll!GetMetaDataInternalInterface+0x3064a 
clr.dll!GetMetaDataInternalInterface+0x30732 
clr.dll!GetMetaDataInternalInterface+0x306e5 
clr.dll!CopyPDBs+0x44a2 
KERNEL32.DLL!BaseThreadInitThunk+0x22 
ntdll.dll!RtlUserThreadStart+0x34 

la mia domanda è: Che cosa è questa funzione CopyPDBs dal clr.dll esattamente facendo?

Ho cercato molto ma ancora non riesco a trovare alcuna esapianazione e/o documentazione di questa funzione.

Nota: Questa domanda è in qualche modo legato ad una domanda precedente di mio, ha chiesto in ServerFault: https://serverfault.com/questions/684554/high-cpu-usage-of-iis-process-w3wp-exe-because-of-many-slow-clr-dllcopypdbs

risposta

13

E non sta facendo nulla. Process Explorer non ha accesso al file PDB per clr.dll, quindi non ne sa abbastanza sul codice. Sempre molto evidente quando si osserva l'offset dell'istruzione dal simbolo noto, +0x44a2 è lungo, oltre la funzione CopyPDBs(). Tutti i simboli che vedi da clr.dll sono spazzatura. I simboli di ntdll.dll sono buoni, si noti i piccoli offset.

Senza un file PDB che fornisce i simboli per le funzioni interne in una DLL, un debugger può fare affidamento solo sulle funzioni esportate. Clr.dll non ne ha molti.

Aiutare Process Explorer a mostrare migliori tracce di stack è oggetto di this blog post.

Windbg non è l'unico modo, è possibile anche farlo con Visual Studio:

  1. Strumenti> Opzioni> Debug> Simboli. Spuntare la casella "Microsoft Symbol Servers" e selezionare una directory della cache.
  2. Progetto> Proprietà> Debug> selezionare l'opzione "Abilita debug del codice nativo".
  3. Premere F5, vedrete il debugger scaricare i simboli. Ci vuole un po ', succede solo una volta.
  4. Informare Process Explorer sulla directory della cache selezionata con Opzioni> Configura simboli.
+1

Un altro articolo correlato: http://www.hanselman.com/blog/SetUpYourSystemToUseMicrosoftsPublicSymbolServer.aspx –

Problemi correlati