eine generische Möglichkeit zum Verfolgen/Protokollieren von Werten aller lokalen Variablen, wenn eine Ausnahme in einer Methode auftritt? (in C# 3)Wie alle lokalen Variablen zu verfolgen, wenn eine Ausnahme auftritt
Antwort
Antwort: Verwenden Sie PostSharp (Policy Injection), das XTraceMethodBoundary-Attribut, überschreiben Sie OnException. Dies protokolliert alle Methodeneingabe- und Rückgabeparametertypen und -werte. Ich habe PostSharp modifiziert, um eine einfache Methode zum Protokollieren von Parametern hinzuzufügen. nicht perfekt aber gut genug
private static void TraceMethodArguments(MethodExecutionEventArgs eventArgs)
{
object[] parameters = eventArgs.GetReadOnlyArgumentArray();
if (parameters != null)
{
string paramValue = null;
foreach (object p in parameters)
{
Type _type = p.GetType();
if (_type == typeof(string) || _type == typeof(int) || _type == typeof(double) || _type == typeof(decimal))
{
paramValue = (string)p;
}
else if (_type == typeof(XmlDocument))
{
paramValue = ((XmlDocument)p).OuterXml;
}
else
{ //try to serialize
try
{
XmlSerializer _serializer = new XmlSerializer(p.GetType());
StringWriter _strWriter = new StringWriter();
_serializer.Serialize(_strWriter, p);
paramValue = _strWriter.ToString();
}
catch
{
paramValue = "Unable to Serialize Parameter";
}
}
Trace.TraceInformation("[" + Process.GetCurrentProcess().Id + "-" + Thread.CurrentThread.ManagedThreadId.ToString() + "]" + " Parameter: " + paramValue);
}
}
}
Sie können nicht, grundsätzlich. Mit Reflection können Sie die Variablen () (und statische Variablen) ermitteln. Wenn Sie jedoch lokale Variablen protokollieren möchten, müssen Sie dies explizit tun. Es ist möglich, dass Sie etwas besser mit der Profiling-API arbeiten könnten, aber das wäre ein ziemlich extremer Schritt.
Sie könnten einen Speicherabbild des Prozesses erstellen, da dieser sowohl die Heaps als auch die Stacks erfasst, aber da Sie die Frage als Protokollierung markiert haben, nehme ich an, dass das nicht das ist, wonach Sie suchen.
Sie können jedoch die Notwendigkeit für diese Informationen reduzieren, indem Sie sicherstellen, dass Ihre Methoden immer klein und auf den Punkt sind. Das wird viel nützlichere Stack-Traces ergeben und es wird die Anzahl der Locals einschränken, die inspiziert werden müssen.
Verwenden Sie MiniDumpWriteDump zum Erstellen eines Speicherauszugs des Prozesses an der Stelle der Ausnahme. Sie müssten P/Invoke es.
- 1. Formularänderungen rückgängig machen, wenn eine Ausnahme auftritt
- 2. Wie weiter Masseneinfügungen wenn Ausnahme auftritt
- 3. Wird eine Datei mit newBufferedReader geöffnet, wenn eine Ausnahme auftritt?
- 4. Holen Sie eine Codezeile in C#, wenn eine Ausnahme auftritt
- 5. ASP.NET - E-Mail senden, wenn eine Ausnahme auftritt
- 6. Apache Camel Route: onCompletion nicht erreicht, wenn eine Ausnahme auftritt?
- 7. wenn ich Mockito Testlauf auftritt WrongTypeOfReturnValue Ausnahme
- 8. Problem abbrechen, wenn Fehler/Ausnahme auftritt?
- 9. Kann ich PreparedStatement erneut verwenden, wenn eine vorübergehende Ausnahme auftritt?
- 10. Wie man TestNG Scharfrichter stoppt, wenn Ausnahme auftritt?
- 11. verfolgen PDOException genereal Ausnahme, wenn Abfrage funktioniert
- 12. Wie kann ich eine einzige Variablen verwenden, um alle meine Tests zu verfolgen?
- 13. Erkennen, wenn eine OnPropertyChanged auftritt
- 14. Gibt es eine Möglichkeit, alle lokalen Variablen in Eclipse auszurichten?
- 15. Freemarker zuweisen Listenlänge zu lokalen Variablen
- 16. Eine Anwendung in GDB ausführen, bis eine Ausnahme auftritt
- 17. In Java, wie setze ich einen Rückgabetyp, wenn eine Ausnahme auftritt?
- 18. Gibt es eine Möglichkeit, testNG Ausführung zu stoppen, wenn Ausnahme auftritt, die in Listener überprüft
- 19. Spülen Sie die Sitzung nicht, nachdem eine Ausnahme auftritt - NHibernate
- 20. Polly Framework CircuitBreakerAsync wiederholt nicht, wenn Ausnahme auftritt
- 21. Initialisierung der lokalen statischen Variablen nach Ausnahme wiederholen
- 22. Wie mache ich Django-Signal-Handler nicht stumm, wenn eine Ausnahme im Signal-Handler auftritt?
- 23. Wenn eine Ausnahme in Catch-Block selbst auftritt, wie in C# damit umzugehen?
- 24. Wie erhalten Sie den voll qualifizierten Methodenname, wenn eine Ausnahme auftritt
- 25. besteht die Möglichkeit, dass während der Variablendefinition eine Ausnahme auftritt?
- 26. Verfolgen einer ignorierten Ausnahme in Python?
- 27. Pass in lokalen Variablen zu Callback-Funktion
- 28. Verwendung von lokalen Variablen
- 29. Wenn Control.ParentChanged-Ereignis auftritt?
- 30. Wie zu verfolgen, wenn ein bestimmter Prozess Ausnahme ausgibt, mit Windows-Dienst in C#