2009-07-28 6 views
1

Ich habe eine ziemlich große WPF-Anwendung geerbt, und ich muss Anwendungsspuren für einen erheblichen Teil davon generieren. Aufgrund der Komplexität des Projekts möchte ich dies tun, ohne Änderungen an der Codebasis vorzunehmen, wenn dies möglich ist. Ich muss meistens die Stackdeltas kennen, also wann ein Funktionsaufruf oder eine Rückgabe stattfindet. Gibt es ein Tool oder eine Methode, die mir diese Spur mit (vorzugsweise) keinen Codeänderungen bringt? Ist das überhaupt möglich, ohne ein Tool zum Hinzufügen von Ablaufverfolgungsaufrufen zum Code zu schreiben?Tool, um Anwendung ohne Codeänderungen zu verfolgen?

Wenn es auf bestimmte Funktionsaufrufe beschränkt war, denke ich, dass ich damit leben könnte. Ich habe ein Werkzeug, das das für Win32 API-Aufrufe tun kann, über das Umschreiben der Import-Tabelle, um den DLL-Funktionsaufruf an einen benutzerdefinierten Stub umzuleiten, der den Aufruf-Stapel an diesem Punkt protokolliert. Wenn es kein solches Tool gibt, das "out of the box" auf .NET funktioniert, kennt jemand eine FAQ oder etwas, das erklärt, wie .NET DLL-Verknüpfung funktioniert (Tabelle, Thunks, usw. exportieren)?

Antwort

1

Um Ihnen eine Antwort zu geben, die nützlich wäre, ist es wirklich wichtig zu wissen, warum benötigen Sie eine Anwendung Trace.

ich denken kann, von:

  1. Für Analysezwecke (Dinge in einer architektonischen Ebene zu verstehen). In diesem Fall wäre ein statisches Codeanalysewerkzeug wie NDepend;

  2. Für Protokollierungszwecke (noch einmal, warum speziell müssen Sie Methoden Eingang und Ausgänge wissen?). Da in diesem Fall die Quelle nicht geändert werden muss, ist ein Aspektorientierungsframework, das Aspekte direkt vor der Ausführung einfügt, wahrscheinlich das, wonach Sie suchen, z. B. PostSharp.

  3. Für die Leistungsanalyse. Verwenden Sie in diesem Fall das Tool, das mit Visual Studio geliefert wird, oder ein kommerzielles Tool wie ANTS Profiler.

Andere AOP-Lösungen existieren, die zum Abfangen von Methodenaufrufe geeignet sein würde (zB Spring.NET), aber diese erfordern Änderungen an der Quelle (wenn auch relativ kleine), die Sie bereits gesagt haben, dass Sie nicht daran interessiert sind,

+0

Aufgrund der großen Größe der Anwendung, bin ich auf der Suche nach einer Architekturanalyse, wie Sie sagen. Ich schaue in NDepend, danke für die Vorschläge :) –

1

Sie können Methodenaufrufe (Trace oder was immer Ihnen gefällt) mit PostSharp Core injizieren, obwohl es keine Out-of-the-Box-Lösung ist.

2

Runtime Flow (von mir entwickelt) bietet die automatische Verfolgung von .NET-Anwendungen ohne Änderungen an der Codebasis.

0

Die Visual Studio-IDE ermöglicht die Definition von "Haltepunkten", die eine Zeichenfolge an alle zugeordneten Ablaufverfolgungslistener ausgeben. Diese Zeichenfolge kann aus einer beliebigen Anzahl von gültigen Variablen bestehen. Standardmäßig unterbricht diese Art von Haltepunkt die Ausführung nicht. Sie können die Konfigurationsdatei verwenden, um andere Ablaufverfolgungslistener anzuhängen, wenn Sie eine Ablaufverfolgungsdatei möchten.

Diese Haltepunktdefinitionen werden als Teil des IDE-Status Ihrer Lösung gespeichert, sodass Sie sie nicht jedes Mal neu einrichten müssen.