Guia de rastreamento dinâmico Solaris

Representação de seqüência

As seqüências são representadas no DTrace como uma matriz de caracteres terminados por um byte nulo (ou seja, um byte cujo valor é zero, geralmente escrito como '\0'). A parte visível da seqüência é do tamanho da variável, dependendo do local do byte nulo, mas o DTrace armazena cada seqüência em uma matriz de tamanho fixo, para que cada teste rastreie uma quantidade consistente de dados. As seqüências não podem ultrapassar o tamanho desse limite de seqüência predefinido, mas o limite pode ser modificado em seu programa em D ou na linha de comando do dtrace, por meio do ajuste da opção strsize . Consulte o Capítulo 16Opções e ajustáveis para obter mais informações sobre opções ajustáveis do DTrace. O limite de seqüência padrão é 256 bytes.

A linguagem D oferece um tipo string específico em vez de usar o tipo char * para fazer referência a seqüências. O tipo string é equivalente a char * no sentido de que é o endereço de uma seqüência de caracteres, porém o compilador e as funções de D, como trace(), oferecem recursos avançados quando aplicados a expressões do tipo string. Por exemplo, o tipo string remove a ambigüidade do tipo char * quando você precisa rastrear os bytes reais de uma seqüência. Na declaração de D:

trace(s);

se s for do tipo char *, o DTrace rastreará o valor do ponteiro s (ou seja, ele rastreará um valor de endereço de inteiro). Na declaração de D:

trace(*s);

por definição do operador *, o compilador D cancelará a referência do ponteiro s e rastreará o único caractere nesse local. Esses comportamentos são essenciais para permitir que você manipule os ponteiros de caractere que por definição se referem a caracteres únicos, ou a matrizes de inteiros de tamanho de byte que não são seqüências e não terminam com um byte nulo. Na declaração de D:

trace(s);

se s for do tipo string, o tipo string indicará para o compilador de D que você deseja que o DTrace rastreie uma seqüência de caracteres terminada em nulo, cujo endereço é armazenado na variável s. Você também pode realizar uma comparação lexical de expressões do tipo string, conforme descrito em Comparação de seqüências.