Tipo de rastreio de pilha

Pilha de rastreio de pilha

Uma variável do tipo stktrace_t é usada para manter o valor de retorno da função ProbeVue get_stktrace, que retorna o rastreio de pilha atual. O rastreio de pilha retornado é o traço de pilha do fio atual. Esta variável também pode ser armazenada em uma matriz associativa seja como uma chave ou como um valor. O tipo stktrace_t é um tipo de dado abstrato, e esta variável não pode ser usada diretamente com as operadoras padrão C unárias ou binárias. Internamente, esta variável é uma matriz de anseios não assinados.

O Vue suporta as seguintes características e operações para as variáveis de tipo de rastreio de pilha:

Declaração de tipo de rastreio de pilha de pilha

Uma variável pode ser declarada como sendo do tipo trace trace declarando-a como segue no script:
      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.
As qualificadoras assinadas, não assinadas, registram, estática, auto, thread, kernel e const não são suportadas para as variáveis do tipo stktrace_t .

Operação de Designação

A designação (=) do operador permite que uma variável do tipo stktrace_t seja atribuída a outra variável do tipo stktrace_t . Os valores originais nas variáveis de destino stktrace_t são destruídos. Nenhum casting do tipo é permitido de ou para os tipos de variáveis stktrace_t . No exemplo a seguir, o conteúdo do rastreio de pilha t1 é atribuído a t2.
      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.

Operação de Comparação

Somente as operadoras de igualdade (==) e desigualdade (! =) são permitidas para as variáveis stktrace_t . O resultado de operador de teses é True (1) ou False (0) com base em todas as entradas das variáveis stktrace_t . Comparações de entradas individuais de variáveis stktrace_t não são permitidas. Nenhum outro operador de comparação (> =, >, < ou =<) são permitidos para as variáveis do tipo stktrace_t .
            if( t1 == t2)  // comparing two stktrace_t type variables.
                     printf(“Entries are similar”);
              else
                     printf(“Entries are not similar”);

Imprimir a variável de tipo de rastreio de pilha

A variável stktrace_t pode ser impressa usando os especificadores de formato %t ou %T na função printf de Vue. A saída é o rastreio de pilha simbólica do fio que é salvo na variável. O símbolo com o endereço (símbolo mais endereço) são impressos apenas quando a thread que corresponde à variável stktrace_t está no estado de execução e quando o especificador de formato %t é usado para imprimir o rastreio de pilha; caso contrário apenas o rastreio de pilha como o endereço é impresso para a variável.

A variável de tipo stktrace_t armazenada em matriz associativa seja como chave ou valor pode ser impressa com função de impressão de matriz associativa. Endereços com símbolo (nome do símbolo + offset) é impresso se thread que corresponde ao tipo stktrace_t armazenado na matriz associativa estiver em execução; caso contrário, apenas endereços são impressos. Quando você configura a sinalização STKTRC_NO_SYM na função set_aso_print_options () , esta variável imprime endereços brutos da thread de execução.
    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. 
                                                     

Limitações para a variável de tipo de rastreio de pilha

  • A matriz da variável stktrace_t não pode ser declarada.
  • As variáveis stktrace_t não podem ser usadas como membro de uma estruturação ou de um sindicato.
  • O acesso de qualquer entrada individual do rastreio de pilha não é permitido.
  • As operações (atribuição, comparação e impressão) das variáveis do tipo stktrace_t não são suportadas na análise de systrace.