combit List & Label 28 - .NET Hilfe
Einführung in die Programmierung / Weitere wichtige Konzepte / Debugging
In diesem Thema
    Debugging
    In diesem Thema

    Probleme die auf dem Entwicklerrechner auftreten können meist leicht gefunden werden – hier kann direkt mit den üblichen Features der Entwicklungsumgebung gearbeitet werden und ein Problem so recht schnell eingegrenzt werden. Der erste Schritt besteht darin, eventuell auftretende Exceptions abzufangen und deren Ursache zu überprüfen (siehe auch Fehlerhandling mit Exceptions).

    Als Entwicklungskomponente wird List & Label aber natürlich unter einer Vielzahl verschiedener Konstellationen bei den Anwendern ausgeführt. Um Probleme dort möglichst einfach zu finden, steht ein eigenes Debug-Tool zur Verfügung, das bei selten oder nur auf bestimmten Systemen auftretenden Problemen eine Protokollierungsfunktion bietet, mit deren Hilfe Probleme auch auf Systemen ohne Debugger untersucht werden können. Natürlich kann die Logging-Funktion auch auf dem Entwicklerrechner genutzt werden und bietet auch dort die Möglichkeit, sämtliche Aufrufe und Rückgabewerte schnell auf einen Blick zu prüfen.

     

    Protokolldatei anfertigen

    Tritt ein Problem nur auf einem Kundensystem auf, sollte auf diesem zunächst eine Protokolldatei erstellt werden. Hierzu dient das Tool Debwin, welches im Verzeichnis Verschiedenes der List & Label-Installation installiert wird. Debwin muss vor der Applikation gestartet werden. Über Capture List & Label Log wird die Protokollierung aktiviert. Wenn anschließend die Applikation gestartet wird, werden sämtliche Aufrufe an die Komponente mit ihren Rückgabewerten sowie einige Zusatzinformationen zu Modulversionen, Betriebssystem etc. protokolliert. Jede unter .NET geworfene Exception entspricht im Protokoll einem negativen Rückgabewert einer Funktion. Im Protokoll finden sich meist weitere hilfreiche Informationen, eine typische Ausgabe könnte wie folgt aussehen:

    ...

    INFO  cmLL28 LL.API 3468 14:41:30.233 >LlSelectFileDlgTitleEx(2,000A1938,'Designer',0x00008001,145F9638='''',16384,00000000)
    INFO  cmLL28 LL.API 3468 14:41:31.563 <LlSelectFileDlgTitleEx() -> -99 (FFFFFF9D) (The user has terminated the operation.)
    INFO  cmLL28 LL.API 3468 14:41:31.564 >LlGetErrortext(-99,14580D10,16384)
    INFO  cmLL28 LL.API 3468 14:41:31.564 <LlGetErrortext() -> 0 (00000000) ['The user has terminated the operation.']
    ERROR cmLL28 LL.NetFX 3468 14:41:31.584 ERR: Caught LL_User_Aborted_Exception (The user has terminated the operation.).
    ERROR cmLL28 LL.NetFX 3468 14:41:31.584 ERR:  Inner Exception:  ()
    ERROR cmLL28 LL.NetFX 3468 14:41:31.584 ERR:  Stack Trace:
    ERROR cmLL28 LL.NetFX 3468 14:41:31.584 ERR:     at combit.Reporting.LLException.CheckReturn(Int32 returnValue)
    ERROR cmLL28 LL.NetFX 3468 14:41:31.584 ERR:    at combit.Reporting.LlCore.LlSelectFileDlgTitleEx(IntPtr windowHandle, String title, LlProject projectType, String& projectFile)
    ERROR cmLL28 LL.NetFX 3468 14:41:31.584 ERR:    at combit.Reporting.ListLabel.DesignLabelFromRelationalDataSource(IDataProvider dataSource, String designerTitle, LlProject projectType, String projectFile, Boolean showFileSelect)
    ERROR cmLL28 LL.NetFX 3468 14:41:31.584 ERR:    at combit.Reporting.ListLabel.AutoDesign(String designerTitle, LlProject projectType, String projectFile, Boolean showFileSelect)

    ...

    Man sieht zunächst die Art der Ausgabe gefolgt von der DLL, die die Ausgabe erzeugt hat. Dann kommt der Ort innerhalb von List & Label, die Thread-ID und eine Timestamp für die Ausgabe sowie den eigentlichen Aufruf mit allen Parametern. In der Folgezeile erfolgt dann die Rückgabe eines Fehlercodes (-99) und eine Erklärung dafür – in diesem Falle hat der Benutzer den Dateiauswahldialog mit "Abbrechen" beendet.

    Soll die Anwendung ohne Hilfe von Debwin Debug-Protokolle erstellen, kann dies z.B. über die Konfigurationsdatei der Anwendung erreicht werden. Eine Protokollierung kann darin wie folgt erzwungen werden:

    <configuration>

     <appSettings>

      <add key="ListLabel DebugLogFilePath"

        value="c:\users\public\debug.log "/>

      <add key="ListLabel EnableDebug" value="1"/>

     </appSettings>

    </configuration>