Ich muss ein Handle-Leck untersuchen, das in einer .NET-Anwendung aufgetreten ist und nur über einen Speicherabbildspeicher verfügen. Ich kann kein Live-Debugging oder Monitoring durchführen.Handle-Leck in .NET-Anwendung ausschließlich aus Speicherabbild untersuchen
Ich öffnete die Dump-Datei in Visual Studio 2015, .NET Memory Profiler und Windbg. Ich kann das 100k offene Handles in Windbg Liste, von denen die meisten Themen Griffe:
0:000> !handle 0006aaf8 f
Handle 0006aaf8
Type Thread
Attributes 0
GrantedAccess 0x1fffff:
Delete,ReadControl,WriteDac,WriteOwner,Synch
Terminate,Suspend,Alert,GetContext,SetContext,SetInfo,QueryInfo,SetToken,Impersonate,DirectImpersonate
HandleCount 3
PointerCount 5
Name <none>
Object specific information
Thread Id 1f24.1ce1c
Priority 10
Base Priority 0
Danach, ich bin stecken. Ich weiß nicht, was ich mit dieser Thread-ID "1f24.1ce1c" tun soll, die nichts mit! Threads (insgesamt 74 Threads) zu tun scheint. Ich sehe auch nichts, was meinen verwalteten Speicher betrifft. Einige Handbücher empfehlen die Verwendung von! Htrace für weitere Untersuchungen, aber wenn ich mich nicht irre, funktioniert das nur, wenn ich es an einen laufenden Prozess anschließe.
Ich wäre für jeden Vorschlag dankbar.
Ein Handle-Leck ist kein kritischer Fehler. Warum können Sie ein Debugging oder anderweitig instrumentierte Build nicht profilieren und nach Handle-Leaks suchen? Sicherlich ist es unwahrscheinlich, dass ein Handle-Leck einen Absturz ausgelöst hat, es sei denn, Sie verlieren Griffe wie * mad *. In diesem Fall wäre es ziemlich einfach, das Problem in einem Debug-Build zu reproduzieren. –
Sie sagen, dass sie Thread-Handles sind. Wer erstellt die Threads? Warum können Sie den Code, der dafür verantwortlich ist, nicht interaktiv debuggen? Ist es nicht Code, den Sie geschrieben haben oder auf den Sie Zugriff haben? –
Sie könnten versuchen, [Debug Diagnostic Tool] (https://www.microsoft.com/en-us/download/details.aspx?id=49924) auszuführen, um das Problem genau zu bestimmen. – Igor