Handbuch zur dynamischen Ablaufverfolgung in Solaris

Zeichenkettendarstellung

Zeichenketten werden in DTrace als Vektoren von Zeichen mit einem abschließenden Null-Byte (d. h. einem Byte mit dem Wert Null, das in der Regel in der Form '\0' geschrieben wird) dargestellt. Der sichtbare Teil einer Zeichenkette hat eine variable Länge, die von der Position des Null-Bytes abhängt. DTrace speichert jedoch jede Zeichenkette in einem Vektor festgelegter Größe, sodass alle Prüfpunkte eine einheitliche Datenmenge verfolgen. Zwar dürfen die Zeichenketten diese vordefinierte Höchstlänge nicht überschreiten, doch lässt sich die Höchstlänge im D-Programm oder in der dtrace-Befehlszeile durch Anpassung der Option strsize ändern. Weitere Informationen zu abstimmbaren DTrace-Optionen finden Sie in Kapitel 16Optionen und Tunables . Die Standardhöchstlänge für Zeichenketten beträgt 256 Byte.

Die Sprache D bietet einen expliziten string-Typ, der anstelle des Typs char * zum Verweisen auf Zeichenketten genutzt werden kann. Der Typ string ist insoweit gleichbedeutend mit einem char *, als er die Adresse einer Folge von Zeichen darstellt. Bei Anwendung auf Ausdrücke des Typs string() stellen der D-Compiler und D-Funktionen wie trace jedoch erweiterte Fähigkeiten bereit. So beseitigt der String-Typ beispielsweise die Zweideutigkeit des Typs char * für den Fall, dass Sie die tatsächlichen Byte einer Zeichenkette verfolgen müssen. In der D-Anweisung:

trace(s);

verfolgt DTrace, wenn s den Typ char * aufweist, den Wert des Zeigers s (d. h., es wird ein ganzzahliger Adresswert aufgezeichnet). In der D-Anweisung:

trace(*s);

dereferenziert der D-Compiler gemäß der Definition des Operators * den Zeiger s und verfolgt das einzelne Zeichen an jener Position. Dieses Verhalten ist grundlegend für die Manipulation von Zeichenzeigern, die entwurfsgemäß entweder auf einzelne Zeichen oder auf Vektoren mit byte-großen Ganzzahlen verweisen, die keine Zeichenketten sind und nicht mit einem Null-Byte enden. In der D-Anweisung:

trace(s);

teilt der Typ string, wenn s ein string ist, dem D-Compiler mit, dass DTrace eine Zeichenkette verfolgen soll, deren Adresse in der Variable s gespeichert ist. Außerdem können Sie lexikalische Vergleiche von Ausdrücken des Typs string durchführen. Dies wird unter Zeichenkettenvergleich beschrieben.