Stack-Trace-Typ

Stack-Trace-Typ

Eine Variable des Typs stktrace_t wird verwendet, um den Rückgabewert der ProbeVue -Funktion get_stktracezu speichern, die den aktuellen Stack-Trace zurückgibt. Der zurückgegebene Stack-Trace ist der Stack-Trace des aktuellen Threads. Diese Variable kann auch als Schlüssel oder als Wert in einem assoziativen Array gespeichert werden. Der Typ stktrace_t ist ein abstrakter Datentyp und diese Variable kann nicht direkt mit den C-Standardoperatoren für uninary oder binär verwendet werden. Intern ist diese Variable ein Array von Langlebigkeit ohne Vorzeichen.

Vue unterstützt die folgenden Merkmale und Operationen für die Stack-Trace-Typvariablen:

Deklaration der Stack-Trace-Typvariablen

Eine Variable kann als Stack-Trace deklariert werden, indem sie im Script wie folgt deklariert wird:
      stktrace_t  st;              // st is a stktrace_t variable.
      st = get_stktrace(5);        //  Get the stack trace up to five levels. 
      a_st[0] = get_stktrace(-1);  // Get the stack trace up to the extent possible and
                                  // store in the associative array a_st as value.
Die Qualifikationsmerkmale signed, unsigned, register, static, auto, thread, kernel und const werden für die Variablen des Typs stktrace_t nicht unterstützt.

Zuordnungsoperation

Der Zuordnungsoperator (=) ermöglicht die Zuordnung einer Typvariablen stktrace_t zu einer anderen Typvariablen stktrace_t . Die ursprünglichen Werte in den Zielvariablen stktrace_t werden gelöscht. Von oder zu den Variablentypen stktrace_t ist keine Typumsetzung zulässig. Im folgenden Beispiel wird der Inhalt des Stack-Trace t1 t2zugeordnet.
      stktrace_t     t1, t2;          // Declares two stack trace variables.
      t1 = get_stktrace();            // Get the current stack trace in t1.
      t2 = t1 ;                       // Get the content of t1 into t2.

Vergleichsoperation

Für die Variablen stktrace_t sind nur Operatoren (==) und Ungleichheit (! =) zulässig. Das Ergebnis dieses Operators ist entweder True (1) oder False (0) basierend auf den gesamten Einträgen der Variablen stktrace_t . Vergleiche einzelner Einträge von stktrace_t -Variablen sind nicht zulässig. Keine anderen Vergleichsoperatoren (> =, >, < oder =<) sind für die Variablen des Typs stktrace_t zulässig.
            if( t1 == t2)  // comparing two stktrace_t type variables.
                     printf(“Entries are similar”);
              else
                     printf(“Entries are not similar”);

Stack-Trace-Typvariable drucken

Die Variable stktrace_t kann mithilfe der Formatkennungen %t oder %T in der printf -Funktion von Vue ausgegeben werden. Die Ausgabe ist der symbolische Stack-Trace des Threads, der in der Variablen gespeichert wird. Das Symbol mit der Adresse (Symbol plus Adresse) wird nur ausgegeben, wenn der Thread, der der Variablen stktrace_t entspricht, aktiv ist und wenn die Formatkennung %t zum Drucken des Stack-Trace verwendet wird. Andernfalls wird nur der Stack-Trace als Adresse für die Variable ausgegeben.

Die im assoziativen Array als Schlüssel oder Wert gespeicherte Variable des Typs stktrace_t kann mit der Druckfunktion des assoziativen Arrays gedruckt werden. Adressen mit Symbol (Symbolname + Offset) werden ausgegeben, wenn ein Thread, der dem im assoziativen Array gespeicherten Typ stktrace_t entspricht, ausgeführt wird. Andernfalls werden nur Adressen gedruckt. Wenn Sie das Flag STKTRC_NO_SYM in der Funktion set_aso_print_options () festlegen, gibt diese Variable unaufbereitete Adressen des aktiven Threads aus.
    stktrace_t t1;
    t1 = get_stktrace (5);
    printf (“%t”, t1);       // Displays the stack trace stored in variable t1.         
    printf (“%T”, t1);      // Displays the stack trace stored in variable t1 with raw addresses.
    a[__tid] = t1;         // Store t1 as value in an associative array a.
    print(a) ;            // Print associative array a, whose value 
																			//	type is stktrace_t variable. 
                                                     

Einschränkungen für Stack-Trace-Typvariable

  • Das Array der Variablen stktrace_t kann nicht deklariert werden.
  • Die Variablen stktrace_t können nicht als Element einer Struktur oder Union verwendet werden.
  • Der Zugriff auf einzelne Einträge des Stack-Trace ist nicht zulässig.
  • Die Operationen (Zuordnung, Vergleich und Ausgabe) der Variablen des Typs stktrace_t werden im Testmonitor systrace nicht unterstützt.