GESCHUETZT
SYNOPSIS
        #include <sys/trace.h>

        int trace(int traceflags);

BESCHREIBUNG
        Setzt die Trace Flags und liefert die alten Trace Flags zurueck.
        Wenn Tracing eingeschaltet ist, wird waehrend der Ausfuehrung eine
        Menge Informationen ausgegeben. Zu viel Output kann die Verbindung
        lahm legen oder sogar den ganzen Treiber zum Absturz bringen.

        Tracing erfolgt auf einer Pro-Verbindung-Basis: jeder interaktive (!)
        User kann sein eigenes Tracelevel und -praefix festlegen. Jeder
        erhaelt nur den Traceoutput fuer den Code, der waehrend der
        Auswertung eines vom User eingegeben Kommandos ausgefuehrt wird.

        Die Trace-Bits (aus <trace.h>) sind:

            TRACE_NOTHING       (  0): Beendet das Tracing
            TRACE_CALL          (  1): Tracet alle Aufrufe von Lfuns
            TRACE_CALL_OTHER    (  2): Tracet alle call_other() Aufrufe
            TRACE_RETURN        (  4): Tracet Resultate von Funktionen
            TRACE_ARGS          (  8): Gibt Argumente und Resultate von
                                       Funktionen aus
            TRACE_EXEC          ( 16): Tracet alle ausgefuehrten Anweisungen
            TRACE_HEART_BEAT    ( 32): Tracet den Heartbeat Code
            TRACE_APPLY         ( 64): Tracet Treiber-Applies
            TRACE_OBJNAME       (128): Gibt den Namen des Objektes aus

        TRACE_EXEC und TRACE_HEART_BEAT sollten nicht verwendet werden, weil
        sie massiven Output verursachen. TRACE_OBJNAME sollte nicht verwendet
        werden, wenn bekannt ist, welches Objekt getracet wird.

        Die Master-Lfun valid_trace() wird mit ("trace", traceflags)
        aufgerufen, um die Erlaubnis fuer die Nutzung von trace() zu erhalten.

BEISPIEL
        object obj;
        string prefix;
        obj=find_player("thomas");
        prefix=objec_name(obj);
        prefix=prefix[1..strlen(prefix)-1];  /* entfernt den Praefix "/" */
        traceprefix(prefix);
        /* Von hier an wird nur Code im Objekt std/player#69 getracet */
        trace(TRACE_CALL|TRACE_CALL_OTHER|TRACE_RETURN|TRACE_ARGS);
        ...
        trace(TRACE_NOTHING);

AENDERUNGEN
        LDMud 3.2.9 uebergibt auch <traceflags> an valid_trace()

SIEHE AUCH
        traceprefix(E)
