Guia de rastreamento dinâmico Solaris

Variáveis externas

D usa o caractere de aspa invertida (`) como um operador de escopo especial para acessar variáveis que são definidas no sistema operacional e não em seu programa em D. Por exemplo, o kernel do Solaris contém uma declaração C de um sistema ajustável chamado kmem_flags para ativar os recursos de depuração do alocador de memória. Consulte o Solaris Tunable Parameters Reference Manual para obter informações sobre kmem_flags. Este ajuste é declarado como uma variável C no código-fonte do kernel da seguinte forma:

int kmem_flags;

Para acessar o valor dessa variável em um programa em D, use a notação D:

`kmem_flags

O DTrace associa cada símbolo de kernel ao tipo usado para o símbolo no código C do sistema operacional correspondente, fornecendo acesso fácil baseado na origem às estruturas de dados do sistema operacional nativo. Para usar as variáveis externas do sistema operacional, você precisará acessar o código-fonte do sistema operacional correspondente.

Quando acessa as variáveis externas a partir de um programa em D, você está acessando os detalhes de implementação interna de outro programa, tal como o kernel do sistema operacional ou seus drivers de dispositivo. Esses detalhes de implementação não formam uma interface estável com a qual você possa contar! Quaisquer programas em D que você escreva que dependam desses detalhes podem parar de funcionar quando você fizer a próxima atualização do software correspondente. Por esse motivo, as variáveis externas são geralmente usadas pelo kernel, desenvolvedores de driver de dispositivo e pessoal de serviço, a fim de depurar o desempenho ou problemas de funcionalidade, usando o DTrace. Para aprender mais sobre a estabilidade dos seus programas em D, consulte o Capítulo 39Estabilidade.

Os nomes de símbolo de kernel são mantidos em um espaço de nome separado da variável D e dos identificadores de função, para que você nunca tenha que se preocupar que esses nomes entrem em conflito com as suas variáveis D. Quando você coloca um prefixo em uma variável com uma aspa invertida, o compilador D procura os símbolos de kernel conhecidos para usar a lista de módulos carregados a fim de encontrar uma definição de variável correspondente. Como o kernel do Solaris aceita módulos carregados dinamicamente com espaços de nome de símbolo separados, o mesmo nome de variável deve ser usado mais de uma vez no kernel do sistema operacional ativo. Você pode resolver esses conflitos de nome especificando o nome do módulo de kernel cuja variável deve ser acessada antes da aspa invertida no nome do símbolo. Por exemplo, cada módulo de kernel carregável geralmente fornece uma função _fini(9E), portanto, para fazer referência ao endereço da função _fini fornecida por um módulo de kernel chamado foo, você deve escrever:

foo`_fini

Você pode aplicar qualquer um dos operadores D a variáveis externas, exceto aqueles que modificam valores, sujeitos às regras usuais de tipos de operando. Quando você inicia o DTrace, o compilador D carrega o conjunto de nomes de variáveis correspondentes aos módulos do kernel ativo, portanto, as declarações dessas variáveis não são necessárias. Você não pode aplicar qualquer operador a uma variável externa que modifique seus valores, tais como = ou +=. Por motivos de segurança, o DTrace evita que você danifique ou corrompa o estado do software que está observando.