einen Profiler Verwenden Sie im Modus verfolgen. Dann wirst du sehen, wie sich alles anruft und wo die Zeit verbracht wird. Neben kommerziellen Profilern gibt es auch kostenlose. Für verwalteten Code gibt es NP Profiler, die ziemlich gut ist.
Wenn Sie tiefer gehen möchten, können Sie die Windows Performance Toolkit verwenden, die Ihnen vollständige Informationen über alle Threads gibt und wie die miteinander interagieren, wenn Sie wissen wollen. Der einzige Unterschied besteht darin, dass Sie Stacks vom Kernel bis zu den verwalteten Frames erhalten.
Wenn das nicht genug ist, können Sie Ihren Code mit einer Tracing-Bibliothek (entweder automatisch mit PostSharp, ....) oder manuell oder mit einem Makro für jede Quelldatei instrumentieren. Ich habe eine kleine Tracing-Bibliothek erstellt, die ziemlich schnell und in hohem Maße konfigurierbar ist. Siehe here. Als einzigartiges Feature kann es jede ausgelöste Ausnahme automatisch verfolgen.
private void SomeOtherMethod()
{
using (Tracer t = new Tracer(myType, "SomeOtherMethod"))
{
FaultyMethod();
}
}
private void FaultyMethod()
{
throw new NotImplementedException("Hi this a fault");
}
Hier kommt die Ausgabe:
18:57:46.665 03064/05180 <{{ > ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeMethod
18:57:46.668 03064/05180 <{{ > ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeOtherMethod
18:57:46.670 03064/05180 < }}< ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeOtherMethod Exception thrown: System.NotImplementedException: Hi this a fault
at ApiChange.IntegrationTests.Diagnostics.TracingTests.FaultyMethod()
at ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeOtherMethod()
at ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeMethod()
at ApiChange.IntegrationTests.Diagnostics.TracingTests.Demo_Show_Leaving_Trace_With_Exception()
18:57:46.670 03064/05180 < }}< ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeOtherMethod Duration 2ms 18:57:46.689 03064/05180 < }}< ApiChange.IntegrationTests.Diagnostics.TracingTests.SomeMethod Duration 24ms
Haben Sie einen Blick nahm http://stackoverflow.com/questions/171970/how-can-i-find-the-method-that-called-the-current-method –
ich nicht helfen kann aber wundere dich, warum du das willst. Im Falle einer Ausnahme können Sie den StackTrace anzeigen. Aber warum sollten Sie ein Protokoll aller Methodenaufrufe haben wollen? – comecme
Es gibt einen Fehler, den wir bis zu einem bestimmten Punkt verfolgen können, und danach geht das Steuerelement zur übergeordneten App, die nicht unsere Anwendung ist - also kein Quellcode (irgendwo danach reagiert die App nicht mehr). Um herauszufinden, was in unserer App danach aufgerufen wird, versuchen wir dies. –