GoGPT Best VPN GoSearch

OnWorks-Favicon

stap – Online in der Cloud

Führen Sie stap im kostenlosen Hosting-Anbieter OnWorks über Ubuntu Online, Fedora Online, den Windows-Online-Emulator oder den MAC OS-Online-Emulator aus

Dies ist der Befehlsschritt, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


stap – Systemtap-Skript-Übersetzer/Treiber

ZUSAMMENFASSUNG


tippe [ OPTIONAL ] DATEINAME [ ARGUMENTE ]
tippe [ OPTIONAL ] - [ ARGUMENTE ]
tippe [ OPTIONAL ] -e SCRIPT [ ARGUMENTE ]
tippe [ OPTIONAL ] -l SONDE [ ARGUMENTE ]
tippe [ OPTIONAL ] -L SONDE [ ARGUMENTE ]
tippe [ OPTIONAL ] unterstützt
tippe [ OPTIONAL ] --dump-probe-aliases
tippe [ OPTIONAL ] --dump-functions

BESCHREIBUNG


Die tippe Das Programm ist das Frontend des Systemtap-Tools. Es akzeptiert Sondierungsanweisungen
in einer einfachen domänenspezifischen Sprache geschrieben, übersetzt diese Anweisungen in C-Code,
kompiliert diesen C-Code und lädt das resultierende Modul in einen laufenden Linux-Kernel oder einen
DynInst User-Space-Mutator, um die angeforderten System-Trace-/Probe-Funktionen auszuführen. Du
kann das Skript in einer benannten Datei (FILENAME) über die Standardeingabe bereitstellen (verwenden Sie - anstelle von
DATEINAME) oder über die Befehlszeile (mit -e SCRIPT) eingeben. Das Programm läuft, bis es fertig ist
vom Benutzer unterbrochen wird oder wenn das Skript das freiwillig aufruft Ausfahrt() Funktion, oder durch
ausreichende Anzahl weicher Fehler.

Die Sprache, die beschrieben wird SCRIPT SPRACHE Abschnitt unten ist streng typisiert,
ausdrucksstark, deklarationsfrei, prozedural, prototypingfreundlich und inspiriert von awk und C.
Es ermöglicht die Verknüpfung von Quellcodepunkten oder Ereignissen im System mit Handlern
sind Unterprogramme, die synchron ausgeführt werden. Vom Konzept her ist es etwas ähnlich
„Breakpoint-Befehlslisten“ in der gdb Debugger.

OPTIONAL


Der Systemtap-Übersetzer unterstützt die folgenden Optionen. Jede andere Option druckt eine Liste
der unterstützten Optionen. Optionen können wie üblich über die Befehlszeile angegeben werden. Wenn die Datei
Wenn $SYSTEMTAP_DIR/rc vorhanden ist, werden auch Optionen von dort geladen und zuerst interpretiert.
($SYSTEMTAP_DIR ist standardmäßig $HOME/.systemtap, wenn es nicht festgelegt ist.)

- Verwenden Sie die Standardeingabe anstelle eines angegebenen DATEINAMEN als Eingabe in die Prüfsprache, es sei denn, -e
SCRIPT ist gegeben.

-h --help
Hilfemeldung anzeigen.

-V --Version
Versionsmeldung anzeigen.

-p NUM Stoppen Sie nach Durchlauf NUM. Die Durchgänge sind von 1 bis 5 nummeriert: analysieren, ausarbeiten, übersetzen,
kompilieren, ausführen. Siehe die WIRD BEARBEITET Abschnitt für Details.

-v Erhöhen Sie die Ausführlichkeit aller Durchgänge. Produzieren Sie eine größere Menge informativer (?)
Ausgabe jedes Mal, wenn die Option wiederholt wird.

--vp ABCDE
Erhöhen Sie die Ausführlichkeit pro Durchgang. Beispiel: „--vp 002“ fügt 2 Einheiten hinzu
Ausführlichkeit, um nur 3 zu bestehen. Die Kombination „-v --vp 00004“ fügt 1 Einheit Ausführlichkeit hinzu
für alle Durchgänge und 4 weitere für Durchgang 5.

-k Behalten Sie das temporäre Verzeichnis nach der gesamten Verarbeitung bei. Dies kann nützlich sein, um
Untersuchen Sie den generierten C-Code oder verwenden Sie das kompilierte Kernelobjekt wieder.

-g Guru-Modus. Ermöglichen Sie das Parsen unsicherer Konstrukte auf Expertenebene wie eingebettetem C.

-P Prolog-Suchmodus. Dies entspricht --prologue-searching=always.
Aktivieren Sie Heuristiken, um falsche Debugging-Informationen für die Funktion zu umgehen
Parameter $Kontextvariablen.

-u Nicht optimierter Modus. Deaktivieren Sie die Elision von ungenutztem Code und viele andere Optimierungen während
Ausarbeitung / Übersetzung.

-w Modus für unterdrückte Warnungen. Deaktiviert alle Warnmeldungen.

-W Behandeln Sie alle Warnungen als Fehler.

-b Verwenden Sie den Massenmodus (Percpu-Dateien) für die Datenübertragung vom Kernel zum Benutzer. Benutzen Sie die stap-merge
Programm, um sie später wieder zusammenzumultiplexen.

-t Sammeln Sie Zeitinformationen über die Anzahl der Sondenausführungen und die durchschnittliche Menge
der an jedem Sondenpunkt verbrachten Zeit. Zeigt auch die Ableitung für jeden Sondenpunkt an.

-sNUM Verwenden Sie NUM Megabyte Puffer für die Datenübertragung vom Kernel zum Benutzer. Auf einem Multiprozessor in
Im Bulk-Modus handelt es sich hierbei um eine Menge pro Prozessor.

-I DIR Fügen Sie das angegebene Verzeichnis zum Tapset-Suchverzeichnis hinzu. Siehe die Beschreibung von
Einzelheiten finden Sie in Schritt 2.

-D NAME = WERT
Fügen Sie die angegebene C-Präprozessoranweisung zum Modul-Makefile hinzu. Diese können genutzt werden
um die unten beschriebenen Grenzwertparameter zu überschreiben.

-B NAME = WERT
Fügen Sie die angegebene Make-Direktive zum Make-Aufruf des Kernel-Modul-Builds hinzu. Diese
kann verwendet werden, um kconfig-Optionen hinzuzufügen oder zu überschreiben.

-a BOGEN
Verwenden Sie einen Cross-Compilation-Modus für die angegebene Zielarchitektur. Dafür braucht man
Zugriff auf den Cross-Compiler und den Kernel-Build-Baum und geht mit dem einher -B
CROSS_COMPILE=arch-tool-prefix- und -r /build/tree nach.

--modinfo NAME = WERT
Fügen Sie das Name/Wert-Paar als MODULE_INFO-Makroaufruf zum generierten Modul hinzu. Das
kann nützlich sein, um verschiedene modulbezogene Prüfungen im Kernel zu informieren oder zu überschreiben.

-G NAME = WERT
Setzt den Wert der globalen Variablen NAME auf VALUE, wenn staprun aufgerufen wird. Das
Gilt für Skalarvariablen, die im Skript/Tapset global deklariert sind.

-R DIR Suchen Sie im angegebenen Verzeichnis nach den Systemtap-Laufzeitquellen.

-r /VERZ
Build für den Kernel im angegebenen Build-Baum. Kann auch mit eingestellt werden SYSTEMTAP_RELEASE
variable Umgebung

-r Loslassen
Build für Kernel im Build-Baum /lib/modules/RELEASE/build. Kann auch mit eingestellt werden
die SYSTEMTAP_RELEASE variable Umgebung

-m MODULE
Verwenden Sie den angegebenen Namen für das generierte Kernel-Objektmodul anstelle eines eindeutigen Namens
zufälliger Name. Das generierte Kernel-Objektmodul wird in das aktuelle kopiert
Verzeichnis.

-d MODULE
Fügen Sie Symbol-/Abwicklungsinformationen für das angegebene Modul zum Kernel-Objektmodul hinzu.
Dies ermöglicht möglicherweise symbolische Rückverfolgungen von diesen Modulen/Programmen, selbst wenn dies der Fall ist
In ihnen ist keine explizite Sonde platziert.

--ldd Fügen Sie Symbol-/Abwickelinformationen für alle von ldd vermuteten gemeinsam genutzten Bibliotheken hinzu
erforderlich, damit User-Space-Binärdateien mit der Option -d geprüft oder aufgelistet werden.
Achtung: Dadurch können die Sondenmodule erheblich größer werden.

--alle-module
Entspricht der Angabe von „-dkernel“ und einem „-d“ für jedes Kernelmodul
aktuell geladen. Achtung: Dadurch können die Sondenmodule erheblich größer werden.

-o FILE
Standardausgabe an benannte Datei senden. Im Massenmodus beginnen Percpu-Dateien mit
FILE_ (FILE_cpu mit -F), gefolgt von der CPU-Nummer. Das unterstützt strftime(3)
Formate für DATEI.

-c CMD Starten Sie die Probes, führen Sie CMD aus und beenden Sie den Vorgang, wenn CMD abgeschlossen ist. Dies hat auch die Wirkung
Setzen von target() auf die PID des ausgeführten Befehls.

-x PID Setzt target() auf PID. Dadurch können Skripte geschrieben werden, die nach einem bestimmten Filter filtern
Verfahren. Skripte werden unabhängig von der Lebensdauer der PID ausgeführt.

-e SCRIPT
Führen Sie das in der Befehlszeile angegebene SCRIPT aus.

-E SCRIPT
Führen Sie das angegebene SCRIPT aus. Dieses Skript wird zusätzlich zum Hauptskript ausgeführt
angegeben, durch -e oder als Skriptdatei. Diese Option kann zum Ausführen wiederholt werden
mehrere Skripte und kann im Listenmodus (-l/-L) verwendet werden.

-l SONDE
Anstatt ein Prüfskript auszuführen, listen Sie einfach alle verfügbaren Prüfpunkte auf, die übereinstimmen
der gegebene einzelne Sondenpunkt. Das Muster kann Platzhalter und Aliase enthalten, aber
Nicht durch Kommas getrennte Mehrfachsondenpunkte. Der Prozessergebniscode wird angezeigt
Fehler, wenn es keine Übereinstimmungen gibt.

-L SONDE
Ähnlich wie „-l“, listet jedoch Prüfpunkte und lokale Variablen auf Skriptebene auf.

-F Laden Sie ohne die Option -o das Modul und starten Sie die Sonden. Trennen Sie dann die Verbindung zum Modul
die Sonden laufen lassen. Mit der Option -o führen Sie staprun im Hintergrund als Daemon aus
und zeige seine PID.

-S Größe[,N]
Legt die maximale Größe der Ausgabedatei und die maximale Anzahl der Ausgabedateien fest. Wenn
Die Größe der Ausgabedatei wird überschritten Größe , systemtap schaltet die Ausgabedatei auf die um
nächste Datei. Und wenn die Anzahl der Ausgabedateien überschritten wird N , systemtap entfernt die
älteste Ausgabedatei. Sie können das zweite Argument weglassen.

--skip-badvars
Ignorieren Sie nicht auflösbare oder zur Laufzeit nicht zugängliche Kontextvariablen und ersetzen Sie sie durch
0, ohne Fehler.

--prologue-searching[=WENN]
Prolog-Suchmodus. Aktivieren Sie Heuristiken, um fehlerhaftes Debuggen zu umgehen
Informationen für Funktionsparameter $context-Variablen. WANN kann beides sein
„nie“, „immer“ oder „automatisch“ (dh durch Heuristik aktiviert). Wenn WHEN fehlt, dann
Es wird „immer“ angenommen. Fehlt die Option, wird „auto“ angenommen.

--suppress-handler-errors
Wickeln Sie alle Sondenhandler in so etwas ein

try { ... } Catch { next }

Block, der dazu führt, dass etwaige Laufzeitfehler stillschweigend unterdrückt werden. Unterdrückte Fehler
nicht gegenrechnen MAXFEHLER Grenzen. In diesem Modus ist die MAXSKIPPED Grenzen sind
wird ebenfalls unterdrückt, so dass sich während eines Vorgangs viele Fehler und übersprungene Sonden ansammeln können
Laufzeit des Skripts. Alle Gesamtzählungen werden beim Herunterfahren weiterhin gemeldet.

--kompatibel VERSION
Unterdrücken Sie aktuelle Skriptsprachen- oder Tapset-Änderungen, die mit den angegebenen nicht kompatibel sind
ältere Version von Systemtap. Dies kann nützlich sein, wenn ein viel älteres Systemtap-Skript verwendet wird
läuft nicht. Weitere Einzelheiten finden Sie im Abschnitt VERALTET.

--check-version
Mit dieser Option wird überprüft, ob das aktive Skript möglicherweise über Konstrukte verfügt
systemtap-versionsspezifisch. Weitere Einzelheiten finden Sie im Abschnitt VERALTET.

--clean-cache
Diese Option entfernt veraltete Einträge aus dem Cache-Verzeichnis. Dies geschieht normalerweise
automatisch nach erfolgreichen Ausführungen, aber diese Option löst die Bereinigung aus
manuell starten und dann beenden. Weitere Informationen zum Cache finden Sie im Abschnitt CACHING
Grenzen.

--color[=WENN], --Farbe[=WENN]
Diese Option steuert die Farbgebung von Fehlermeldungen. WANN kann entweder „nie“ sein,
„immer“ oder „auto“ (dh nur aktivieren, wenn an einem Terminal). Wenn WHEN fehlt, dann
Es wird „immer“ angenommen. Fehlt die Option, wird „auto“ angenommen.

Farben können mit der Umgebungsvariablen SYSTEMTAP_COLORS geändert werden. Das Format
muss die Form haben key1=val1:key2=val2:key3=val3 ...usw. Gültige Schlüssel sind „error“,
„Warnung“, „Quelle“, „Caret“ und „Token“. Die Werte bilden die Auswahlgrafik
Wiedergabeparameter (SGR). Konsultieren Sie dazu die Dokumentation Ihres Terminals
SGRs, die es unterstützt. Beispielsweise würden die Standardfarben wie folgt ausgedrückt:
error=01;31:warning=00;33:source=00;34:caret=01:token=01. Wenn SYSTEMTAP_COLORS ist
Fehlt sie, werden die Standardfarben verwendet. Wenn es leer oder ungültig ist, erfolgt die Einfärbung
ausgeschaltet.

--disable-cache
Diese Option deaktiviert jegliche Verwendung des Cache-Verzeichnisses. Es werden auch keine Dateien gelesen
aus dem Cache oder in den Cache geschrieben.

--poison-cache
Diese Option behandelt Dateien im Cache-Verzeichnis als ungültig. Es werden keine Dateien gelesen
aus dem Cache, die resultierenden Dateien dieses Laufs werden jedoch weiterhin in den geschrieben
Zwischenspeicher. Dies ist als Hilfe bei der Fehlerbehebung gedacht, wenn das zwischengespeicherte Verhalten von stap dies zu tun scheint
sich schlecht benehmen.

--Privileg[=stapusr | =Stapsie | =stapdev]
Diese Option weist tippe um das Skript zu untersuchen und nach Konstrukten zu suchen, die vorhanden sind
für die angegebene Berechtigungsstufe nicht zulässig (siehe UNTERPRIVILIGIERT NUTZER).
Die Kompilierung schlägt fehl, wenn solche Konstrukte verwendet werden. Wenn stapusr or Stapsie sind
angegeben, wenn ein Compile-Server verwendet wird (siehe --use-server), wird der Server prüfen
das Skript und wenn die Kompilierung erfolgreich ist, signiert der Server das Skript kryptografisch
resultierende Kernelmodul, das bescheinigt, dass es für die Verwendung durch Benutzer am sicher ist
angegebene Berechtigungsstufe.

If --Privileg wurde nicht angegeben, -PN wurde nicht mit N < 5 angegeben, und
der aufrufende Benutzer ist es nicht Wurzel, und ist kein Mitglied der Gruppe stapdev und dann tippe
fügt automatisch das entsprechende hinzu --Privileg Option zu den Optionen bereits
spezifiziert.

--unterpriviligiert
Diese Option ist äquivalent zu --privilege=stapusr.

--use-server[=HOSTNAME[:HAFEN] | =IP ADRESSE[:HAFEN] | =CERT_SERIAL]
Geben Sie Kompilierungsserver an, die für die Kompilierung und/oder in Verbindung mit verwendet werden sollen
--list-servers und --trust-servers (siehe unten). Wenn kein Argument angegeben wird, dann
die Standardeinstellung im unprivilegierten Modus (siehe --Privileg) besteht darin, kompatible Server auszuwählen
die als SSL-Peers und als Modulunterzeichner vertrauenswürdig sind und derzeit online sind.
Andernfalls werden standardmäßig kompatible Server ausgewählt, denen SSL vertraut wird
Kollegen und derzeit online. --use-server kann mehrfach angegeben werden, wobei
In diesem Fall wird eine Liste der Server in der angegebenen Reihenfolge zusammengestellt. Server können sein
angegeben durch Hostnamen, IP-Adresse oder durch die Seriennummer des Zertifikats (erhalten mit
--list-servers). Letzteres wird am häufigsten verwendet, wenn das Vertrauen hinzugefügt oder widerrufen wird
ein Server (vgl --trust-servers unter). Wenn ein Server durch Hostnamen oder IP angegeben ist
Adresse, dann kann optional eine Portnummer angegeben werden. Dies ist nützlich für
Zugriff auf Server, die sich nicht im lokalen Netzwerk befinden, oder um eine bestimmte Angabe vorzunehmen
Server.

IP-Adressen können IPv4- oder IPv6-Adressen sein.

Wenn eine bestimmte IPv6-Adresse verbindungslokal ist und auf mehr als einer Schnittstelle vorhanden ist,
Die vorgesehene Schnittstelle kann angegeben werden, indem an die Adresse ein Prozentwert angehängt wird
Vorzeichen (%) gefolgt vom beabsichtigten Schnittstellennamen. Zum Beispiel,
"fe80::5eff:35ff:fe07:55ca%eth0".

Um eine Portnummer mit einer IPv6-Adresse anzugeben, ist die Angabe erforderlich
die IPv6-Adresse in eckigen Klammern ([]), um die Portnummer von zu trennen
der Rest der Adresse. Zum Beispiel „[fe80::5eff:35ff:fe07:55ca]:5000“ oder
"[fe80::5eff:35ff:fe07:55ca%eth0]:5000".

If --use-server wurde nicht angegeben, -PN wurde nicht mit N < 5 angegeben, und
der aufrufende Benutzer nicht Wurzel, ist kein Mitglied der Gruppe stapdev, ist aber Mitglied
aus der Gruppe stapusr und dann tippe wird automatisch hinzugefügt --use-server zu den Optionen
bereits angegeben.

unterstützt[=ja|=nicht]
Weist stap an, die Kompilierung eines Skripts mithilfe eines Kompilierungsservers erneut zu versuchen, wenn
Die Kompilierung auf dem lokalen Host schlägt in einer Weise fehl, die darauf hindeutet, dass dies der Fall sein könnte
Erfolgreich mit einem Server. Wenn diese Option nicht angegeben ist, ist die Standardeinstellung nicht. Wenn nein
Wenn ein Argument angegeben wird, lautet der Standardwert ja. Die Kompilierung wird erneut versucht
bestimmte Arten von Fehlern (z. B. unzureichende Daten oder Ressourcen), die möglicherweise nicht auftreten
während der Neukompilierung durch einen Kompilierungsserver. Kompilierungsserver werden ausgewählt
automatisch für den Neukompilierungsversuch als ob --use-server wurde mit angegeben
keine Argumente.

--list-servers[=SERVER]
Zeigen Sie den Status der angeforderten Anfrage an SERVER, Wobei SERVER ist durch Kommas getrennt
Liste der Serverattribute. Die Liste der Attribute wird kombiniert, um die Liste zu filtern
Server angezeigt. Unterstützte Attribute sind:

alle Gibt alle bekannten Server an (vertrauenswürdige SSL-Peers, vertrauenswürdige Modulunterzeichner,
Online-Server).

angegeben
gibt die mit angegebenen Server an --use-server.

Online Filtert die Ausgabe, indem es Informationen über die Server behält, die vorhanden sind
Gerade online.

vertraut
Filtert die Ausgabe, indem Informationen über vertrauenswürdige Server beibehalten werden
als SSL-Peers.

Unterzeichner Filtert die Ausgabe, indem Informationen über vertrauenswürdige Server beibehalten werden
als Modulunterzeichner (siehe --Privileg).

kompatibel
Filtert die Ausgabe, indem es Informationen über die Server behält, die vorhanden sind
kompatibel mit der aktuellen Kernel-Version und -Architektur.

Wenn kein Argument angegeben wird, ist der Standardwert angegeben. Wenn keine Server wären
angegeben mit --use-server, dann die Standardserver für --use-server sind aufgelistet.

Beachten Sie, dass --list-servers verwendet das Avahi-Daemon Dienst zur Erkennung von Online-Servern. Wenn
Dieser Dienst ist dann nicht verfügbar --list-servers wird keines erkennen Online
Server. Damit --list-servers um Server zu erkennen, die IPv6-Adressen abhören,
die Avahi-Daemon Konfigurationsdatei /etc/avahi/avahi-daemon.conf muss eine enthalten
aktive Zeile „use-ipv6=yes“. Der Dienst muss nach dem Hinzufügen dieser Zeile neu gestartet werden
um IPv6 zu aktivieren.

--trust-servers[=TRUST_SPEC]
Gewähren oder widerrufen Sie das Vertrauen in Kompilierungsserver, angegeben mit --use-server wie angegeben
durch TRUST_SPEC, wobei TRUST_SPEC eine durch Kommas getrennte Liste ist, die die Vertrauensstellung angibt
die erteilt oder widerrufen werden soll. Unterstützte Elemente sind:

ssl Vertrauen Sie den angegebenen Servern als SSL-Peers.

Unterzeichner Vertrauen Sie den angegebenen Servern als Modulunterzeichner (siehe --Privileg). Nur root
kann spezifizieren Unterzeichner.

Alle Nutzer
Gewähren Sie allen Benutzern auf dem lokalen Host Vertrauen als SSL-Peer. Die Standardeinstellung ist
um nur dem aktuellen Benutzer Vertrauen als SSL-Peer zu gewähren. Vertrauen als Modul
Unterzeichner wird immer für alle Benutzer gewährt. Nur root kann angeben Alle Nutzer.

widerrufen Widerrufen Sie die angegebene Vertrauensstellung. Standardmäßig wird es gewährt.

keine Aufforderung
Bitten Sie den Benutzer nicht um eine Bestätigung, bevor Sie die gewünschte Aktion ausführen
Aktion. Standardmäßig wird der Benutzer zur Bestätigung aufgefordert.

Wenn kein Argument angegeben wird, ist der Standardwert ssl. Wenn keine Server angegeben wurden
mit automatisierten --use-server, dann wird kein Vertrauen gewährt oder widerrufen.

Es sei denn keine Aufforderung angegeben wurde, wird der Benutzer aufgefordert, die Vertrauensstellung zu bestätigen
vor der Durchführung der Operation gewährt oder widerrufen werden muss.

unterstützt
Gibt eine Liste der unterstützten Probe-Typen und Exits aus. Wenn --privilege=stapusr ist auch
angegeben, wird die Liste auf Sondentypen beschränkt, die für nicht privilegierte Benutzer verfügbar sind.

--dump-probe-aliases
Gibt eine Liste aller in Bibliotheksdateien gefundenen Probe-Aliase aus und wird beendet.

--dump-functions
Gibt eine Liste aller in Bibliotheksdateien gefundenen Funktionen aus und wird beendet. Enthält auch ihre
Parameter und Typen. Eine Funktion vom Typ „unbekannt“ gibt eine Funktion an, die dies tut
gibt keinen Wert zurück. Beachten Sie, dass möglicherweise nicht alle Funktions-/Parametertypen aufgelöst werden
(Diese werden auch durch „unbekannt“ angezeigt). Diese Funktion ist sehr speicherintensiv und
funktioniert daher möglicherweise nicht ordnungsgemäß --use-server wenn der Zielserver ein rlimit vorgibt
auf Prozessspeicher (d. h. durch die ~stap-server/.systemtap/rc Konfigurationsdatei,
sehen stap-server(8)).

--Fernbedienung URL
Legen Sie das Ausführungsziel auf den angegebenen Host fest. Diese Option kann für das Ziel wiederholt werden
mehrere Ausführungsziele. Die Durchgänge 1–4 werden lokal wie beim Erstellen üblich abgeschlossen
Das Skript und dann Pass 5 kopieren das Modul auf das Ziel und führen es aus.
Zu den zulässigen URL-Formularen gehören:

[USER@]HOSTNAME, ssh://[USER@]HOSTNAME
Dieser Modus verwendet SSH und optional einen Benutzernamen, der nicht mit Ihrem eigenen übereinstimmt. Wenn ein
Benutzerdefinierte ssh_config-Datei wird verwendet, hinzufügen SendEnv SPRACHE zurückhalten
Internationalisierungsfunktionalität.

unterstützt, libvirt://DOMAIN/LIBVIRT_URI
Dieser Modus verwendet stapvirt um das Skript auf einer von verwalteten Domäne auszuführen
libvirt. Optional kann LIBVIRT_URI angegeben werden, um eine Verbindung zu einem bestimmten herzustellen
Treiber und/oder einen Remote-Host. Zum Beispiel, um sich privilegiert mit dem lokalen Netzwerk zu verbinden
QEMU-Treiber, verwenden Sie:

--remote libvirt://MyDomain/qemu:///system

Siehe die Seite unterhttp://libvirt.org/uri.html> für unterstützte URIs. Siehe auch
stapvirt(1) Weitere Informationen zur Vorbereitung der Domain für stap
Sondierung.

unix:PFAD
Dieser Modus stellt eine Verbindung zu einem UNIX-Socket her. Dies kann mit einer QEMU-Virtualisierung verwendet werden.
Serieller Port zum Ausführen von Skripten innerhalb einer laufenden virtuellen Maschine.

Direkte://
Spezieller Loopback-Modus zur Ausführung auf dem lokalen Host.

--remote-Präfix
Stellen Sie jeder Zeile der Remote-Ausgabe „N:“ voran, wobei N der Index der Remote-Ausgabe ist
Ausführungsziel, von dem die angegebene Zeile stammt.

--download-debuginfo[=OPTION]
Aktivieren, deaktivieren oder legen Sie ein Zeitlimit für die Funktion zum automatischen Herunterladen von Debuginformationen fest
angeboten von abrt wie durch OPTION angegeben, wobei OPTION einer der folgenden ist:

ja Aktivieren Sie das automatische Herunterladen von Debuginformationen ohne Zeitüberschreitung. Das ist das gleiche
da kein OPTION-Wert bereitgestellt wird --download-debuginfo

nicht Deaktivieren Sie explizit das automatische Herunterladen von Debuginfo. Das ist das Gleiche wie
Ich nutze die Option überhaupt nicht.

fragen Zeigen Sie die ABT-Ausgabe an und fragen Sie, bevor Sie mit dem Download fortfahren. Es wird keine Auszeit geben
gesetzt.


Geben Sie eine Zeitüberschreitung als positive Zahl an, um den Download zu stoppen, wenn er dauert
zu lang.

--rlimit-as=ANZAHL
Geben Sie die maximale Größe des virtuellen Speichers (Adressraum) des Prozesses in Bytes an.
Wenn nichts angegeben ist, werden keine Grenzen gesetzt.

--rlimit-cpu=ANZAHL
Geben Sie das CPU-Zeitlimit in Sekunden an. Wenn nichts angegeben ist, gibt es keine Einschränkungen
auferlegt.

--rlimit-nproc=ANZAHL
Geben Sie die maximale Anzahl von Prozessen an, die erstellt werden können. Wenn nichts ist
angegeben, es werden keine Grenzen gesetzt.

--rlimit-stack=ANZAHL
Geben Sie die maximale Größe des Prozessstapels in Bytes an. Wenn nichts angegeben ist,
Es werden keine Grenzen gesetzt.

--rlimit-fsize=ANZAHL
Geben Sie die maximale Größe der Dateien in Bytes an, die der Prozess erstellen darf. Wenn nichts
vorgegeben ist, sind keine Grenzen gesetzt.

-Sysroot=VERZ
Geben Sie das Sysroot-Verzeichnis an, in dem sich die Zieldateien (ausführbare Dateien, Bibliotheken usw.) befinden
gelegen. Mit -r Loslassen, wird die Sysroot nach dem passenden Kernel durchsucht
Build-Verzeichnis. Mit -r /VERZ, die Sysroot wird jedoch nicht zum Suchen verwendet
Kernel-Build.

--sysenv=VAR=WERT
Geben Sie einen alternativen Wert für eine Umgebungsvariable an, wobei der Wert auf einer Remote-Variable liegt
System unterscheidet sich. Es wird davon ausgegangen, dass Pfadvariablen (z. B. PATH, LD_LIBRARY_PATH) vorhanden sind
relativ zum Verzeichnis, das von bereitgestellt wird -Sysroot, falls vorhanden.

--suppress-time-limits
Deaktivieren Sie die mit -DSTP_OVERLOAD verbundenen Optionen sowie -DMAXACTION und -DMAXTRYLOCK.
Diese Option erfordert den Guru-Modus.

--Laufzeit=MODUS
Legen Sie den Pass-5-Laufzeitmodus fest. Gültige Optionen sind Kern (Standard) und dyninst. Sehen
WECHSELN LAUFZEITEN unten für weitere Informationen.

--dyninst
Abkürzung für --runtime=dyninst.

--save-uprobes
Auf Maschinen, die erfordern, dass SystemTap ein eigenes Uprobes-Modul erstellt (Kernel vor
bis Version 3.5) weist diese Option SystemTap an, auch eine Kopie des Moduls zu speichern
im aktuellen Verzeichnis (erstellen Sie zuerst ein neues „uprobes“-Verzeichnis).

--target-namespacesunterstützt
Ermöglicht die Festlegung einer Reihe von Ziel-Namespaces basierend auf den angegebenen Namespaces
PID ist in. Dies ist für Namespace-fähige Tapset-Funktionen. Wenn die Ziel-Namespaces
nicht festgelegt wurde, werden als Ziel standardmäßig die Namespaces des Stap-Prozesses verwendet.

ARGUMENTE


Alle zusätzlichen Argumente in der Befehlszeile werden an den Skriptparser übergeben
Auswechslung. Siehe unten.

SCRIPT SPRACHE


Die Systemtap-Skriptsprache ähnelt awk und C. Es gibt zwei Hauptäußere
Konstrukte: Sonden und Funktionen. Darin verwenden Anweisungen und Ausdrücke C-like
Operatorsyntax und Priorität.

ALLGEMEIN SYNTAX
Leerzeichen werden ignoriert. Es werden drei Formen von Kommentaren unterstützt:
# ... Shell-Stil, bis zum Zeilenende, außer $# und @#
// ... C++-Stil, bis zum Zeilenende
/* ... C-Stil ... */
Literale sind entweder in doppelte Anführungszeichen eingeschlossene Zeichenfolgen (die den üblichen C-Escape durchlaufen).
Codes mit Backslashes und zusammengeklebten benachbarten String-Literalen, ebenfalls wie in C),
oder ganze Zahlen (dezimal, hexadezimal oder oktal, unter Verwendung derselben Notation wie in C). Alle
Die Länge von Zeichenfolgen ist auf einen angemessenen Wert (einige hundert Bytes) begrenzt. Ganze Zahlen
sind 64-Bit-Größen mit Vorzeichen, obwohl der Parser auch Werte akzeptiert (und umschließt).
über positiv 2**63.

Darüber hinaus können am Ende der Befehlszeile angegebene Skriptargumente eingefügt werden. Verwenden
$1 ... $ zum Einfügen ohne Anführungszeichen, @1 ... @ zum Einfügen als String-Literal. Der
Auf die Anzahl der Argumente kann zugegriffen werden $# (als nicht zitierte Zahl) oder durch @# (Als ein
angegebene Zahl). Diese können an jedem Ort verwendet werden, an dem ein Token beginnen kann, auch innerhalb des
Vorverarbeitungsphase. Der Verweis auf eine Argumentnummer, die über die eigentliche Angabe hinausgeht, ist ein
Fehler.

VORVERARBEITUNG
Im Rahmen der Analyse wird eine einfache bedingte Vorverarbeitungsstufe ausgeführt. Die allgemeine Form ist
ähnlich dem cond ? exp1 : exp2 ternärer Operator:

%( BEDINGUNG %? WAHRE TOKENS %)
%( BEDINGUNG %? WAHRE TOKENS %: FALSCHE TOKENS %)

Die BEDINGUNG ist entweder ein Ausdruck, dessen Format durch sein erstes Schlüsselwort bestimmt wird, oder
ein String-Literal-Vergleich oder ein numerischer Literal-Vergleich. Es kann auch zusammengesetzt sein aus
viele Alternativen und Konjunktionen von BEDINGUNGEN (gemeint wie im vorherigen Satz) mit ||
bzw. &&. Klammern werden jedoch noch nicht unterstützt. Denken Sie also daran
Es ist wichtig, dass die Konjunktion Vorrang vor der Alternative hat.

Wenn der erste Teil der Bezeichner ist kernel_vr or kernel_v um auf die Kernel-Version zu verweisen
Nummer, mit („2.6.13-1.322FC3smp“) oder ohne („2.6.13“) dem Release-Code-Suffix
Der zweite Teil ist einer der sechs standardmäßigen numerischen Vergleichsoperatoren <, <=, ==, !=, >,
und >=und der dritte Teil ist ein String-Literal, das eine Versionsfreigabe im RPM-Stil enthält
Wert. Die Bedingung gilt als erfüllt, wenn die Version des Zielkernels (as
optional durch überschrieben -r Option) vergleicht mit der angegebenen Versionszeichenfolge. Der
Der Vergleich wird von der Glibc-Funktion durchgeführt strverscmp. Als Sonderfall, wenn die
Operator steht für einfache Gleichheit (==) oder Ungleichheit (!=), und der dritte Teil enthält alle
Platzhalterzeichen (* or ? or [), dann wird der Ausdruck als Wildcard-(Nicht-)Übereinstimmung behandelt
wie bewertet von fnmatch.

Wenn hingegen der erste Teil die Kennung ist Bogen sich auf den Prozessor beziehen
Architektur (wie vom Kernel-Build-System ARCH/SUBARCH benannt), dann ist der zweite Teil
einer der beiden String-Vergleichsoperatoren == or !=und der dritte Teil ist eine Zeichenfolge
Literal für den Abgleich. Bei diesem Vergleich handelt es sich um eine Wildcard-(Miss-)Übereinstimmung.

Ebenso, wenn der erste Teil ein Bezeichner ist wie unterstützt sich auf einen Kernel beziehen
Konfigurationsoption, dann ist der zweite Teil == or !=und der dritte Teil ist eine Zeichenfolge
Literal zum Abgleichen des Werts (üblicherweise „y“ oder „m“). Nicht vorhandener oder nicht gesetzter Kernel
Konfigurationsoptionen werden durch die leere Zeichenfolge dargestellt. Dieser Vergleich ist auch ein
Wildcard-(Nicht-)Übereinstimmung.

Wenn der erste Teil der Bezeichner ist systemtap_v, der Test bezieht sich auf den Systemtap
Kompatibilitätsversion, die für alte Skripte mit der überschrieben werden kann --kompatibel Flagge.
Der Vergleichsoperator ist wie beschrieben kernel_v und der rechte Operand ist eine Versionszeichenfolge.
Siehe auch den Abschnitt „VERALTET“ weiter unten.

Wenn der erste Teil der Bezeichner ist systemtap_privileg, der Test bezieht sich auf das Privileg
Ebene, mit der das Systemtap-Skript kompiliert wird. Hier ist der zweite Teil == or != und
Der dritte Teil ist ein String-Literal, entweder „stapusr“ oder „stapsys“ oder „stapdev“.

Wenn der erste Teil der Bezeichner ist guru_mode, der Test bezieht sich auf das Systemtap-Skript
wird mit guru_mode kompiliert. Hier ist der zweite Teil == or !=, und der dritte Teil ist a
Zahl, entweder 1 oder 0.

Wenn der erste Teil der Bezeichner ist Laufzeit, der Test bezieht sich auf die Systemtap-Laufzeit
Modus. Sehen WECHSELN LAUFZEITEN Weitere Informationen zu Laufzeiten finden Sie weiter unten. Der zweite Teil ist
einer der beiden String-Vergleichsoperatoren == or !=und der dritte Teil ist eine Zeichenfolge
Literal für den Abgleich. Bei diesem Vergleich handelt es sich um eine Wildcard-(Miss-)Übereinstimmung.

Andernfalls wird erwartet, dass die BEDINGUNG ein Vergleich zwischen zwei oder zwei Zeichenfolgenliteralen ist
numerische Literale. In diesem Fall sind die Argumente die einzigen verwendbaren Variablen.

Die TRUE-TOKENS und FALSE-TOKENS sind null oder mehr allgemeine Parser-Tokens (möglicherweise).
einschließlich verschachtelter Präprozessor-Bedingungen) und werden an den Eingabestream übergeben, wenn die
Bedingung ist wahr oder falsch. Der folgende Code löst beispielsweise einen Analysefehler aus, es sei denn
Die Zielkernelversion ist neuer als 2.6.5:

%( kernel_v <= "2.6.5" %? **FEHLER** %) # ungültige Tokensequenz

Der folgende Code könnte sich an eine hypothetische Kernel-Versionsdrift anpassen:

probe kernel.function (
%( kernel_v <= "2.6.12" %? "__mm_do_fault" %:
%( kernel_vr == "2.6.13*smp" %? "do_page_fault" %:
NICHT UNTERSTÜTZT % %
) { /* ... */ }

%( arch == "ia64" %?
probe syscall.vliw = kernel.function("vliw_widget") {}
%)

PRÄPROZESSOR MAKROS
Der Präprozessor unterstützt auch eine einfache Makrofunktion, die zuvor als separater Durchgang ausgeführt wird
bedingte Vorverarbeitung.

Makros werden mit dem folgenden Konstrukt definiert:

@define NAME %( BODY %)
@define NAME(PARAM_1, PARAM_2, ...) %( BODY %)

Sowohl Makros als auch Parameter innerhalb eines Makrokörpers werden durch Voranstellen des Makronamens aufgerufen
mit einem @-Symbol:

widersprochenx%)
@define add(a,b) %( ((@a)+(@b)) %)

@foo = @add(2,2)

Die Makroerweiterung wird derzeit in einem separaten Durchgang vor der bedingten Kompilierung durchgeführt.
Daher werden sowohl TRUE- als auch FALSE-Tokens in bedingten Ausdrücken makroexpandiert
unabhängig davon, wie der Zustand bewertet wird. Dies kann manchmal zu Fehlern führen:

// Folgendes führt zu einem Konflikt:
%( CONFIG_UTRACE == "y" %?
@define foo %( process.syscall %)
%:
@define foo %( **FEHLER** %)
%)

// Folgendes funktioniert wie erwartet ordnungsgemäß:
@define foo %(
%( CONFIG_UTRACE == "y" %?process.syscall %: **FEHLER** %)
%)

Das erste Beispiel ist falsch, da beide @defines in einem Durchgang vor dem ausgewertet werden
Bedingung wird ausgewertet.

Normalerweise ist eine Makrodefinition lokal für die Datei, in der sie vorkommt. Daher ist die Definition eines Makros in
Ein Tapset stellt es dem Benutzer des Tapsets nicht zur Verfügung. Öffentlich verfügbar
Bibliotheksmakros können definiert werden, indem .stpm-Dateien in den Tapset-Suchpfad aufgenommen werden. Diese
Dateien dürfen nur @define-Konstrukte enthalten, die über alle Tapsets und sichtbar werden
Benutzerskripte.

VARIABLEN
Bezeichner für Variablen und Funktionen sind eine alphanumerische Folge und können Folgendes umfassen: _
und $ Figuren. Sie beginnen möglicherweise nicht mit einer einfachen Ziffer, wie in C. Jede Variable ist by
standardmäßig lokal für den Probe- oder Funktionsanweisungsblock, in dem es erwähnt wird, und
Daher ist sein Umfang und seine Lebensdauer auf einen bestimmten Prüfpunkt- oder Funktionsaufruf beschränkt.

Skalare Variablen werden implizit entweder als Zeichenfolge oder als Ganzzahl typisiert. Assoziative Arrays
haben auch einen String- oder Integer-Wert und ein Tupel aus Strings und/oder Integern, die als dienen
Taste. Hier sind ein paar grundlegende Ausdrücke.

var1 = 5
var2 = „bar“
array1 [pid()] = „name“ # einzelner numerischer Schlüssel
array2 ["foo",4,i++] += 5 # Vektor von string/num/num-Tasten
if (["hello",5,4] in array2) println ("yes") # Mitgliedschaftstest

Der Übersetzer führt aus tippe Inferenz auf allen Bezeichnern, einschließlich Array-Indizes und
Funktionsparameter. Eine inkonsistente typbezogene Verwendung von Bezeichnern signalisiert einen Fehler.

Variablen können als global deklariert werden, sodass sie von allen Sonden gemeinsam genutzt werden und als leben
solange die gesamte Systemtap-Sitzung. Es gibt einen Namensraum für alle globalen Variablen.
unabhängig davon, in welcher Skriptdatei sie sich befinden. Gleichzeitiger Zugriff auf global
Variablen werden automatisch mit Sperren geschützt, siehe SICHERHEIT UND SICHERHEIT Abschnitt für
mehr Details. Eine globale Deklaration kann irgendwo auf der äußersten Ebene geschrieben werden, nicht
innerhalb eines Codeblocks. Globale Variablen, die geschrieben, aber nie gelesen werden, werden es tun
Wird beim Beenden der Sitzung automatisch angezeigt. Der Übersetzer wird für jeden seinen Wert ableiten
Typ und, wenn es als Array verwendet wird, seine Schlüsseltypen. Optional können skalare Globale sein
initialisiert mit einem String- oder Zahlenliteral. Die folgende Deklaration markiert Variablen als
global.

globale var1, var2, var3=4

Globale Variablen können auch als Moduloptionen festgelegt werden. Dies kann entweder mit -G erfolgen
Option, oder das Modul muss zuerst mit stap -p4 kompiliert werden. Globale Variablen können dann sein
Wird in der Befehlszeile festgelegt, wenn staprun für das von stap -p4 generierte Modul aufgerufen wird. Sehen
staprun(8) für weitere Informationen.

Die Größe von Arrays wird durch die Variable MAXMAPENTRIES begrenzt – siehe SICHERHEIT UND SICHERHEIT
Weitere Informationen finden Sie im Abschnitt. Optional können globale Arrays mit einer maximalen Größe in deklariert werden
Klammern, die MAXMAPENTRIES nur für dieses Array überschreiben. Beachten Sie, dass dies nicht darauf hinweist
die Art der Schlüssel für das Array, nur die Größe.

globale tiny_array[10], normales_array, big_array[50000]

Arrays können für das Umbrechen mit dem Suffix „%“ konfiguriert werden. Dies führt dazu, dass ältere Elemente
überschrieben werden, wenn mehr Elemente eingefügt werden, als das Array aufnehmen kann. Das funktioniert bei beiden
assoziative und statistiktypisierte Arrays.

globale Wrapped_array1%[10], Wrapped_array2%

Viele Arten von Sondenpunkten stellen sicher Kontextvariablen bereit, bei denen es sich um Laufzeitwerte handelt
aus dem untersuchten Kernel oder Userspace-Programm extrahiert. Diesen wird das vorangestellt
$ Charakter. Der Abschnitt KONTEXTVARIABLEN in stapprobes(3stap) listet auf, was verfügbar ist
für jede Art von Sondenpunkt. Diese Kontextvariablen werden zu normalen Zeichenfolgen oder Zahlen
Skalare, sobald sie in normalen Skriptvariablen gespeichert sind. Siehe den Abschnitt TYPECASTING
Im Folgenden erfahren Sie, wie Sie sie wieder in typisierte Zeiger zur weiteren Verarbeitung als Kontext umwandeln
Variablen.

ABSCHLUSS
Anweisungen ermöglichen einen prozeduralen Kontrollfluss. Sie können innerhalb von Funktionen und Sonden auftreten
Handler. Die Gesamtzahl der Anweisungen, die als Reaktion auf ein einzelnes Probe-Ereignis ausgeführt wurden
ist auf eine durch ein Makro im übersetzten C-Code definierte Zahl beschränkt und befindet sich in der
Nachbarschaft von 1000.

EXP Führt den Ausdruck mit Zeichenfolgen- oder Ganzzahlwert aus und verwirft den Wert.

{ STMT1 STMT2 ... }
Führen Sie jede Anweisung in diesem Block nacheinander aus. Beachten Sie, dass Trennzeichen bzw
Zwischen Anweisungen sind im Allgemeinen keine Abschlusszeichen erforderlich.

; Null-Anweisung, nichts tun. Es eignet sich als optionales Trennzeichen zwischen
Anweisungen zur Verbesserung der Syntaxfehlererkennung und zur Handhabung bestimmter Grammatik
Mehrdeutigkeiten.

if (EXP) STMT1 [ sonst STMT2 ]
Vergleichen Sie den ganzzahligen EXP mit Null. Führen Sie den ersten (ungleich Null) oder zweiten STMT aus
(Null).

und gleichzeitig die (EXP) STMT
Führen Sie STMT aus, während EXP mit ganzzahligem Wert ungleich Null ausgewertet wird.

für (EXP1; EXP2; EXP3) STMT
Führen Sie EXP1 als Initialisierung aus. Während EXP2 ungleich Null ist, führen Sie STMT aus, dann das
Iterationsausdruck EXP3.

foreach (VAR in ARRAY [ begrenzen EXP ]) STMT
Durchlaufen Sie jedes Element des benannten globalen Arrays und weisen Sie VAR den aktuellen Schlüssel zu.
Das Array darf innerhalb der Anweisung nicht verändert werden. Durch Hinzufügen einer Single + or -
Operator nach dem VAR- oder ARRAY-Bezeichner, wird die Iteration in a fortgesetzt
Sortierte Reihenfolge, nach aufsteigendem oder absteigendem Index oder Wert. Wenn das Array enthält
Statistikaggregate, Hinzufügen der gewünschten @Operator zwischen der ARRAY-Kennung
und der + or - gibt die Sortieraggregatfunktion an. Siehe STATISTIK
Im Abschnitt unten finden Sie die verfügbaren. Standard ist @zählen. Verwenden des optionalen begrenzen
Das Schlüsselwort begrenzt die Anzahl der Schleifeniterationen auf EXP-Zeiten. EXP wird einmal ausgewertet
am Anfang der Schleife.

foreach ([VAR1, VAR2, ...] in ARRAY [ begrenzen EXP ]) STMT
Dasselbe wie oben, wird verwendet, wenn das Array mit einem Tupel von Schlüsseln indiziert wird. Eine Sortierung
Das Suffix darf höchstens für einen VAR- oder ARRAY-Bezeichner verwendet werden.

foreach ([VAR1, VAR2, ...] in ARRAY [INDEX1, INDEX2, ...] [ begrenzen EXP ]) STMT
Dasselbe wie oben, wobei die Iterationen auf Elemente im Array beschränkt sind, in denen sich die Schlüssel befinden
mit den angegebenen Indexwerten übereinstimmen. Mit dem Symbol * kann ein Index angegeben werden und
wird als Platzhalter behandelt.

foreach (WERT = VAR in ARRAY [ begrenzen EXP ]) STMT
Diese Variante von foreach speichert den aktuellen Wert bei jeder Iteration in VALUE
das Gleiche wie ARRAY[VAR]. Dies funktioniert auch mit einem Tupel von Schlüsseln. Suffixe sortieren nach
VALUE haben die gleiche Wirkung wie bei ARRAY.

foreach (WERT = VAR in ARRAY [INDEX1, INDEX2, ...] [ begrenzen EXP ]) STMT
Dasselbe wie oben, wobei die Iterationen auf Elemente im Array beschränkt sind, in denen sich die Schlüssel befinden
mit den angegebenen Indexwerten übereinstimmen. Mit dem Symbol * kann ein Index angegeben werden und
wird als Platzhalter behandelt.

brechen, fortsetzen
Verlassen oder wiederholen Sie die innerste Verschachtelungsschleife (und gleichzeitig die or für or foreach) Stellungnahme.

Rückkehr EXP
Gibt den EXP-Wert von der einschließenden Funktion zurück. Wenn der Wert der Funktion nicht übernommen wird
irgendwo, dann ist keine Return-Anweisung erforderlich und die Funktion verfügt über eine
spezieller „unbekannter“ Typ ohne Rückgabewert.

weiter Kehren Sie jetzt vom einschließenden Sondenhandler zurück. Dies ist besonders nützlich bei Sonden
Aliase, die Ereignisfilterungsprädikate anwenden.

versuchen {wider} Fang {wider}
Führen Sie die Anweisungen im ersten Block aus. Bei Laufzeitfehlern STMT1 abbrechen und
Beginnen Sie mit der Ausführung von STMT2. Alle Fehler in STMT2 werden auf den äußeren Try/Catch übertragen
Blöcke, falls vorhanden.

versuchen {wider} Fang(VAR) { STMT2 }
Dasselbe wie oben, plus Zuweisung der Fehlermeldung zur String-Skalarvariablen VAR.

löschen ARRAY[INDEX1, INDEX2, ...]
Entfernen Sie das durch das Indextupel angegebene Element aus ARRAY. Wenn das Indextupel
Enthält ein * anstelle eines Indexes, wird das * als Platzhalter und alle Elemente behandelt
mit Schlüsseln, die mit dem Indextupel übereinstimmen, werden aus ARRAY entfernt. Der Wert wird nein
nicht mehr verfügbar und nachfolgende Iterationen melden das Element nicht mehr. Es ist
Kein Fehler beim Löschen eines Elements, das nicht vorhanden ist.

löschen ARRAY
Entfernen Sie alle Elemente aus ARRAY.

löschen SKALAR
Entfernt den Wert von SCALAR. Ganzzahlen und Zeichenfolgen werden auf 0 und „“ gelöscht.
bzw. während die Statistiken auf den anfänglichen leeren Zustand zurückgesetzt werden.

AUSDRÜCKE
Systemtap unterstützt eine Reihe von Operatoren, die die gleiche allgemeine Syntax, Semantik und haben
Vorrang wie in C und awk. Die Arithmetik wird gemäß den typischen C-Regeln für Vorzeichen durchgeführt
ganze Zahlen. Eine Division durch Null oder ein Überlauf wird erkannt und führt zu einem Fehler.

binäre numerische Operatoren
* / % + - >> << & ^ | && ||

binäre String-Operatoren
. (String-Verkettung)

Numerische Zuweisungsoperatoren
= *= /= %= += -= >> = << = &= ^= |=

String-Zuweisungsoperatoren
= .=

unäre numerische Operatoren
+ - ! ~ ++ --

Binär-numerische Operatoren, String-Vergleichsoperatoren oder Regex-Matching-Operatoren
< > <= >= == != =~ !~

ternärer Operator
cond ? exp1 : exp2

Gruppierungsoperator
( exp )

Funktionsaufruf
fn ([ arg1, arg2, ... ])

Überprüfung der Array-Mitgliedschaft
exp in Array
[exp1, exp2, ...] in Array
[*, *, ... ]in Array

REGULAR AUSDRUCK PASSEND
Die Skriptsprache unterstützt den Vergleich regulärer Ausdrücke. Die grundlegende Syntax ist as
folgt:

exp =~ Regex
exp !~ Regex

(Der erste Operand muss ein Ausdruck sein, der eine Zeichenfolge ergibt; der zweite Operand muss
ein String-Literal sein, das einen syntaktisch gültigen regulären Ausdruck enthält.)

Die reguläre Ausdruckssyntax unterstützt die meisten Funktionen von POSIX Extended Regular
Ausdrücke, mit Ausnahme der Funktionalität zur Wiederverwendung von Unterausdrücken („\1“). Die Fähigkeit zu erfassen
und extrahieren Sie den Inhalt der übereinstimmenden Zeichenfolge und der Unterausdrücke noch nicht
implementiert.

PROBEN
Das Hauptkonstrukt in der Skriptsprache identifiziert Sonden. Sonden assoziieren Zusammenfassung
Ereignisse mit einem Anweisungsblock („Probe-Handler“), der ausgeführt werden soll, wenn eines dieser Ereignisse auftritt
Ereignisse passieren. Die allgemeine Syntax lautet wie folgt:

Sonde PROBEPOINT [, PROBEPUNKT] { [STMT ...] }
Sonde PROBEPOINT [, PROBEPUNKT] if (BEDINGUNG) { [STMT ...] }

Ereignisse werden in einer speziellen Syntax namens „Probe Points“ angegeben. Es gibt einige
Verschiedene vom Übersetzer definierte Sondenpunkte und Tapset-Skripte können weitere Definitionen vornehmen
diejenigen, die Aliase verwenden. Sondenpunkte können mit Platzhaltern versehen, gruppiert oder bevorzugt aufgelistet werden
Sequenzen oder als optional deklariert werden. Weitere Details zur Sondenpunktsyntax und -semantik finden Sie hier
aufgeführt auf der stapprobes(3stap) Handbuchseite.

Der Sondenhandler wird relativ zum Kontext jedes Ereignisses interpretiert. Für Veranstaltungen
Im Zusammenhang mit Kernel-Code kann dieser Kontext Folgendes umfassen: Variablen definiert in der Quelle Code
an dieser Stelle. Diese „Kontextvariablen“ werden dem Skript als Variablen präsentiert, deren
Namen werden mit dem Präfix „$“ versehen. Auf sie kann nur zugegriffen werden, wenn der Compiler des Kernels dies beibehält
sie trotz Optimierung. Dies ist die gleiche Einschränkung, mit der ein Debugger-Benutzer konfrontiert ist, wenn
Arbeiten mit optimiertem Code. Darüber hinaus müssen die Objekte im ausgelagerten Speicher vorhanden sein
der Moment der Ausführung des Systemtap-Probe-Handlers, da Systemtap nicht dazu führen darf
(unterdrückt) jegliches zusätzliches Paging. Einige Sondentypen haben sehr wenig Kontext. Siehe die
stapprobes(3stap)-Manpages, um die Arten von Kontextvariablen anzuzeigen, die für jede Art verfügbar sind
des Sondenpunktes.

Sonden können mit einem verziert sein Bewaffnung Zustand, bestehend aus einem einfachen booleschen Wert
Ausdruck für schreibgeschützte globale Skriptvariablen. Im entwaffneten Zustand (Zustand wird mit bewertet).
false) reduzieren oder eliminieren einige Probe-Typen ihren Laufzeit-Overhead. Bei einer Scharfschaltung
Bedingung wird als wahr ausgewertet, Sonden werden es sein bald wieder bewaffnet, und ihre Sondenführer werden es tun
Sie werden aufgerufen, sobald die Ereignisse ausgelöst werden. (Einige Ereignisse können während der Scharfschaltung verloren gehen
Intervall. Wenn dies nicht akzeptabel ist, verwenden Sie für diese Sonden keine Aktivierungsbedingungen.)

Neue Sondenpunkte können mithilfe von „Aliasnamen“ definiert werden. Sondenpunkt-Aliase sehen ähnlich aus wie
Sondendefinitionen, aber anstatt eine Sonde an der angegebenen Stelle zu aktivieren, definiert sie lediglich eine
Neuer Sondenpunktname als Alias ​​für einen vorhandenen. Es gibt zwei Arten von Alias, nämlich
der Prolog-Stil und der Epilog-Stil, die durch „=" und „+=" gekennzeichnet sind
beziehungsweise.

Bei einem Alias ​​im Prolog-Stil handelt es sich um den Anweisungsblock, der auf eine Alias-Definition folgt
wird implizit als Prolog zu jeder Sonde hinzugefügt, die auf den Alias ​​verweist. Während für die
Alias ​​im Epilog-Stil, der Anweisungsblock, der einer Alias-Definition folgt, ist implizit
Wird als Epilog zu jeder Sonde hinzugefügt, die auf den Alias ​​verweist. Zum Beispiel:

probe syscall.read = kernel.function("sys_read") {
fildes = $fd
if (execname() == "init") next # Rest der Sonde überspringen
}

Definiert einen neuen Sondenpunkt syscall.read, das erweitert zu kernel.function("sys_read"), mit
die gegebene Anweisung als Prolog, was nützlich ist, um einige Variablen für die vorab zu definieren
Alias-Benutzer zu verwenden und/oder die Sondenverarbeitung aufgrund bestimmter Bedingungen vollständig zu überspringen. Und

probe syscall.read += kernel.function("sys_read") {
if (tracethis) println ($fd)
}

Definiert einen neuen Prüfpunkt mit der angegebenen Anweisung als Epilog, was nützlich ist
Aktionen basierend auf Variablen, die vom Alias-Benutzer festgelegt oder übrig geblieben sind. Bitte beachten Sie, dass in
In jedem Fall werden die Anweisungen im Alias-Handler-Block normal behandelt, sodass
Dort zugewiesene Variablen stellen lediglich eine Initialisierung dar, keine Makrosubstitution.

Ein Alias ​​wird genau wie ein integrierter Sondentyp verwendet.

Probe syscall.read {
printf("reading fd=%d\n", fildes)
if (fildes > 10) Tracethis = 1
}

FUNKTIONEN
Systemtap-Skripte können Unterroutinen definieren, um häufige Arbeiten auszusortieren. Funktionen übernehmen beliebige
Anzahl der Skalarargumente (Ganzzahl oder Zeichenfolge) und muss einen einzelnen Skalar (Ganzzahl) zurückgeben
oder Zeichenfolge). Eine Beispielfunktionsdeklaration sieht so aus:

Funktion thisfn (arg1, arg2) {
gib arg1 + arg2 zurück
}

Beachten Sie das allgemeine Fehlen von Typdeklarationen, die stattdessen von abgeleitet werden
Übersetzer. Bei Bedarf kann eine Funktionsdefinition jedoch einen expliziten Typ enthalten
Deklarationen für seinen Rückgabewert und/oder seine Argumente. Dies ist besonders hilfreich für
Embedded-C-Funktionen. Im folgenden Beispiel muss die Typinferenz-Engine nur ableiten
Typtyp von arg2 (ein String).

Funktion thatfn:string (arg1:long, arg2) {
widerspricht. unterstützt
}

Funktionen können andere oder sich selbst rekursiv aufrufen, bis zu einer festen Verschachtelungsgrenze. Das
Der Grenzwert wird durch ein Makro im übersetzten C-Code definiert und liegt in der Nähe von 10.

DRUCK
Es gibt eine Reihe von Funktionsnamen, die vom Übersetzer speziell behandelt werden. Sie
Formatieren Sie Werte zum Drucken in den Standard-Systemtap-Ausgabestream auf bequemere Weise
Weg. Der Sprint* Varianten geben die formatierte Zeichenfolge zurück, anstatt sie auszugeben.

drucken, Sprint
Drucken Sie einen oder mehrere Werte beliebiger Art, direkt miteinander verkettet.

System.out.println, sprintln
Druckwerte wie drucken und Sprint, sondern auch eine neue Zeile anhängen.

gedruckt, sprintete
Nehmen Sie ein Zeichenfolgentrennzeichen und zwei oder mehr Werte eines beliebigen Typs und geben Sie die Werte aus
mit dazwischenliegendem Trennzeichen. Das Trennzeichen muss eine literale Zeichenfolgenkonstante sein.

printdln, sprintdln
Drucken Sie Werte mit einem Trennzeichen wie gedruckt und sprintete, sondern auch eine neue Zeile anhängen.

printf, sprintf
Nehmen Sie eine Formatierungszeichenfolge und eine Reihe von Werten entsprechender Typen und drucken Sie sie aus
das Einkaufszentrum. Das Format muss eine Literal-String-Konstante sein.

Die printf Formatierungsanweisungen ähnlich denen von C, außer dass sie vollständig typisiert sind.
vom Übersetzer geprüft:

%b Schreibt einen binären Blob des angegebenen Werts anstelle von ASCII-Text. Die Breite
Der Spezifizierer bestimmt die Anzahl der zu schreibenden Bytes. Gültige Spezifizierer sind %b
%1b %2b %4b %8b. Der Standardwert (%b) beträgt 8 Byte.

%c Zeichen.

%d,%i Dezimalzahl mit Vorzeichen.

%m Liest den Kernelspeicher sicher an der angegebenen Adresse und gibt seinen Inhalt aus. Der
Der optionale Präzisionsbezeichner (nicht die Feldbreite) bestimmt die Anzahl
Zu lesende Bytes – Standardwert ist 1 Byte. %10.4m druckt 4 Bytes des Speichers in a
10 Zeichen breites Feld.

%M Wie %m, aber Ausgabe im Hexadezimalformat. Die minimale Ausgabegröße beträgt
Verdoppeln Sie den optionalen Genauigkeitsbezeichner – der Standardwert ist 1 Byte (2 Hexadezimalzeichen).
%10.4M druckt 4 Bytes des Speichers als 8 Hexadezimalzeichen in a
10 Zeichen breites Feld.

%o Vorzeichenloses Oktal.

%p Unsignierte Zeigeradresse.

%s String.

%u Dezimalzahl ohne Vorzeichen.

%x Hexadezimalwert ohne Vorzeichen, ausschließlich in Kleinbuchstaben.

%X Hexadezimalwert ohne Vorzeichen, ausschließlich in Großbuchstaben.

%% Schreibt einen %.

Die # Flag wählt die alternativen Formen aus. Bei Oktalzahlen wird eine 0 vorangestellt. Bei Hexalwerten wird dies vorangestellt
Präfixe 0x oder 0X, je nach Fall. Bei Zeichen werden nicht druckbare Werte dadurch maskiert
entweder mit C-ähnlichen Escapezeichen oder rohem Oktal.

Beispiele:

a = „alice“, b = „bob“, p = 0x1234abcd, i = 123, j = -1, id[a] = 1234, id[b] = 4567
print("Hallo")
Drucke: Hallo
println(b)
Drucke: bob\n
println(a . " ist " . Sprint(16))
Drucke: Alice ist 16
foreach (Name in ID) printdln("|", strlen(name), name, id[name])
Drucke: 5|alice|1234\n3|bob|4567
printf("%c ist %s; %x oder %X oder %p; %d oder %u\n",97,a,p,p,p,j,j)
Drucke: a ist Alice; 1234abcd oder 1234ABCD oder 0x1234abcd; -1 oder 18446744073709551615\n
printf("2 Bytes Kernel-Puffer an Adresse %p: %2m", p, p)
Druckt: 2 Byte Kernel-Puffer an Adresse 0x1234abcd:
printf("%4b", p)
Druckt (diese Werte als Binärdaten): 0x1234abcd
printf("%#o %#x %#X\n", 1, 2, 3)
Druckt: 01 0x2 0X3
printf("%#c %#c %#c\n", 0, 9, 42)
Druckt: \000 \t *

STATISTIKEN
Es ist oft wünschenswert, Statistiken auf eine Weise zu sammeln, die die Strafen vermeidet
wiederholtes exklusives Sperren der globalen Variablen, in die diese Zahlen eingefügt werden.
Systemtap bietet eine Lösung, die einen speziellen Operator zum Akkumulieren von Werten verwendet, und zwar mehrere
Pseudofunktionen zum Extrahieren der statistischen Aggregate.

Der Aggregationsoperator ist <<und ähnelt einer Zuweisung oder einem C++-Ausgabe-Streaming
Betrieb. Der linke Operand gibt einen Skalar- oder Array-Index-Wert an, der sein muss
global deklariert. Der rechte Operand ist ein numerischer Ausdruck. Die Bedeutung ist intuitiv:
Fügen Sie die angegebene Zahl zum Zahlenstapel hinzu, um die Statistik zu berechnen. (Die spezifische Liste
(Die Anzahl der zu sammelnden Statistiken wird durch die Extraktionsfunktionen separat angegeben.)

foo <<< 1
stats[pid()] <<< memsize

Besonders sind auch die Extraktionsfunktionen. Für jedes Auftreten einer bestimmten Extraktion
Bei einer Funktion, die mit einem gegebenen Bezeichner arbeitet, veranlasst der Übersetzer die Berechnung einer Reihe von
Statistiken, die es erfüllen. Das Statistiksystem ist dabei „on-demand“. Jede Hinrichtung
einer Extraktionsfunktion bewirkt, dass die Aggregation für diesen Moment über alle berechnet wird
Prozessoren.

Hier ist der Satz von Extraktorfunktionen. Das erste Argument von jedem ist der gleiche Stil
L-Wert, der auf der linken Seite der Akkumulationsoperation verwendet wird. Der @count(v), @sum(v),
@min(v), @max(v), @avg(v) Extraktorfunktionen berechnen die
Anzahl/Summe/Minimum/Maximum/Durchschnitt aller akkumulierten Werte. Die resultierenden Werte sind
alle einfachen ganzen Zahlen. Arrays, die Aggregate enthalten, können sortiert und iteriert werden. Siehe die
foreach oben konstruieren.

Histogramme sind ebenfalls verfügbar, sind jedoch komplizierter, da sie eher einen Vektor haben
als der Skalarwert. @hist_linear(v,start,stop,interval) stellt ein lineares Histogramm dar
„Start“ bis „Stop“ in Schritten von „Intervall“. Das Intervall muss positiv sein. Ähnlich,
@hist_log(v) stellt ein logarithmisches Histogramm zur Basis 2 dar. Drucken eines Histogramms mit dem
drucken Die Funktionsfamilie rendert ein Histogrammobjekt als tabellarisches Balkendiagramm im „ASCII-Stil“.

probe timer.profile {
x[1] <<< pid()
x[2] <<< uid()
y <<< tid()
}
global x // ein Array, das Aggregate enthält
globales y // ein Skalar
Sondenende {
foreach ([i] in x @count+) {
printf ("x[%d]: avg %d = sum %d / count %d\n",
i, @avg(x[i]), @sum(x[i]), @count(x[i]))
println (@hist_log(x[i]))
}
println ("y:")
println (@hist_log(y))
}

SCHRIFTART
Einmal ein Zeiger (siehe Abschnitt KONTEXTVARIABLEN von stapprobes(3stap)) wurde gespeichert
in eine Skript-Ganzzahlvariable umwandelt, verliert der Übersetzer die dafür erforderlichen Typinformationen
Greifen Sie über diesen Zeiger auf Mitglieder zu. Verwendung der @gießen() Der Operator sagt dem Übersetzer, wie es geht
Interpretieren Sie die Zahl als typisierten Zeiger.

@cast(p, "type_name"[, "module"])->member

Dies wird interpretiert p als Zeiger auf eine Struktur/Union mit dem Namen Modellname und dereferenzieren
Mitglied Wert. Weiter ->Unterfeld Ausdrücke können angehängt werden, um weitere Ebenen zu dereferenzieren.
HINWEIS: derselbe Dereferenzierungsoperator -> wird verwendet, um sich sowohl auf die direkte Eindämmung als auch auf die direkte Eindämmung zu beziehen
Zeiger-Indirektion. Systemtap ermittelt automatisch welche. Die Wahl Modulen erzählt
dem Übersetzer, wo er nach Informationen zu diesem Typ suchen kann. Es können mehrere Module vorhanden sein
als Liste angegeben mit : Trennzeichen. Wenn das Modul nicht angegeben ist, wird es standardmäßig verwendet
entweder zum Sondenmodul für Zwergsonden oder zum „Kernel“ für Funktionen und alles andere
Sondentypen.

Der Übersetzer kann ein eigenes Modul mit Typinformationen aus einem von umgebenden Header erstellen
spitze Klammern, falls normale Debuginfo nicht verfügbar ist. Stellen Sie Kernel-Headern ein Präfix voran
mit „kernel“, um das entsprechende Build-System zu verwenden. Alle anderen Header werden mit erstellt
Standard-GCC-Parameter in ein Benutzermodul. Es können mehrere Header nacheinander angegeben werden
eine Co-Abhängigkeit auflösen.

@cast(tv, „timeval“, „ ")->tv_sec
@cast(task, „task_struct“, „kernel ")->tgid
@cast(task, "task_struct",
„Kernel ")->fs->umask

Werte erworben von @gießen kann von der hübsch gedruckt werden $ und $$ Suffixoperatoren, das Gleiche
Weise, wie im Abschnitt KONTEXTVARIABLEN beschrieben stapprobes(3stap) Handbuchseite.

Im Guru-Modus ermöglicht der Übersetzer Skripten auch, Mitgliedern neue Werte zuzuweisen
von typisierten Zeigern.

Typecasting ist auch im Fall von nützlich nichtig * Mitglieder, deren Typ bestimmbar sein kann
Laufzeit.

sondiere foo {
if ($var->type == 1) {
value = @cast($var->data, "type1")->bar
} Else {
value = @cast($var->data, "type2")->baz
}
print(Wert)
}

EMBEDDED C
Im Guru-Modus akzeptiert der Übersetzer eingebetteten Code in der obersten Ebene des Skripts.
Ein solcher Code ist dazwischen eingeschlossen %{ und %} Markierungen und wird wörtlich ohne transkribiert
Analyse, in einer bestimmten Reihenfolge, in die oberste Ebene des generierten C-Codes. Am äußersten
Ebene, es kann nützlich sein, dies hinzuzufügen #einschließen Anweisungen und alle Hilfsdefinitionen für
Verwendung durch anderen eingebetteten Code.

Ein weiterer Ort, an dem eingebetteter Code zulässig ist, ist als Funktionskörper. In diesem Fall ist die
Der Hauptteil der Skriptsprache wird vollständig durch einen dazwischen eingeschlossenen Teil des C-Codes ersetzt %{
und %} Markierungen. Dieser C-Code kann alles Vernünftige und Sichere tun. Es gibt eine Reihe von
Undokumentierte, aber komplexe Sicherheitsbeschränkungen für Atomizität, Parallelität und Ressourcen
Verbrauch und Laufzeitbegrenzungen, es handelt sich also um eine fortschrittliche Technik.

Die für Ein- und Ausgabewerte reservierten Speicherplätze werden ihm über zur Verfügung gestellt
Makros STAP_ARG_* und STAP_RETVALUE. Fehler können mit STAP_ERROR signalisiert werden. Ausgabe evtl
mit STAP_PRINTF geschrieben werden. Die Funktion kehrt möglicherweise vorzeitig mit STAP_RETURN zurück. Hier sind
einige Beispiele:

Funktion integer_ops (val) %{
STAP_PRINTF("%d\n", STAP_ARG_val);
STAP_RETVALUE = STAP_ARG_val + 1;
if (STAP_RETVALUE == 4)
STAP_ERROR("falsche Schätzung: %d", (int) STAP_RETVALUE);
if (STAP_RETVALUE == 3)
STAP_RETURN(0);
STAP_RETVALUE ++;
%}
Funktion string_ops (val) %{
strlcpy (STAP_RETVALUE, STAP_ARG_val, MAXSTRINGLEN);
strlcat (STAP_RETVALUE, „one“, MAXSTRINGLEN);
if (strcmp (STAP_RETVALUE, „drei-zwei-eins“))
STAP_RETURN("Parameter sollte drei-zwei- sein");
%}
Funktion no_ops () %{
STAP_RETURN(); /* Funktion ohne Rückgabewert abgeleitet */
%}

Die Funktionsargument- und Rückgabewerttypen müssen vom Übersetzer abgeleitet werden
die Anrufseiten, damit dies funktioniert. Der Benutzer sollte den für generierten C-Code untersuchen
gewöhnliche Skriptsprachenfunktionen, um kompatible Embedded-C-Funktionen zu schreiben.

Der letzte Ort, an dem eingebetteter Code zulässig ist, ist als Ausdruck rvalue. In diesem Fall,
der dazwischen eingeschlossene C-Code %{ und %} markers wird als gewöhnlicher Ausdruck interpretiert
Wert. Es wird davon ausgegangen, dass es sich um eine normale 64-Bit-Zahl mit Vorzeichen handelt, es sei denn, der Marker /* Schnur */
ist enthalten und wird in diesem Fall als Zeichenfolge behandelt.

Funktion add_one (val) {
Rückgabewert + %{ 1 %}
}
Funktion add_string_two (val) {
Rückgabewert. %{ /* string */ "two" %}
}

Der eingebettete C-Code kann Markierungen enthalten, um Optimierungs- und Sicherheitseigenschaften zu gewährleisten.

/* auch */
bedeutet, dass der C-Code keine Nebenwirkungen hat und bei Bedarf vollständig weggelassen werden kann
wird nicht vom Skriptcode verwendet.

/* stabil */
bedeutet, dass der C-Code immer den gleichen Wert hat (in jedem gegebenen Probe-Handler).
Aufruf), sodass wiederholte Aufrufe automatisch durch gespeicherte Werte ersetzt werden können.
Solche Funktionen dürfen keine Parameter annehmen und auch sein auch.

/* unterpriviligiert */
bedeutet, dass der C-Code so sicher ist, dass auch unprivilegierte Benutzer ihn verwenden dürfen
es.

/* myproc-unprivileged */
bedeutet, dass der C-Code so sicher ist, dass auch unprivilegierte Benutzer ihn verwenden dürfen
vorausgesetzt, dass sich das Ziel der aktuellen Sonde im eigenen Prozess des Benutzers befindet.

/* Guru */
bedeutet, dass der C-Code so unsicher ist, dass ein Systemtap-Benutzer dies angeben muss -g (Guru
Modus), um dies zu verwenden.

/* entfesselt */
bedeutet in einer eingebetteten C-Funktion, dass das Legacy-Argument (vor 1.8) auf die Syntax zugreift
sollte innerhalb der Funktion verfügbar gemacht werden. Daher zusätzlich zu STAP_ARG_foo
und STAP_RETVALUE man kann verwenden DIES->foo und DIES->__Wiederwert bzw. innen
die Funktion. Dies ist nützlich, um für SystemTap geschriebenen Code schnell zu migrieren
Version 1.7 und früher.

/* unmodifizierte-fnargs */
bedeutet in einer eingebetteten C-Funktion, dass die Funktionsargumente nicht geändert werden
innerhalb des Funktionskörpers.

/* Schnur */
Nur in eingebetteten C-Ausdrücken bedeutet dies, dass der Ausdruck hat const verkohlen * Typ und
sollte als Zeichenfolgewert und nicht als standardmäßiger langer numerischer Wert behandelt werden.

EINBAU
Eine Reihe integrierter Sondenpunkt-Aliase wird von den im installierten Skripts bereitgestellt
Verzeichnis, das in angegeben ist Stufenpfade(7) Handbuchseite. Die Funktionen sind im beschrieben
stapprobes(3stap) Handbuchseite.

WIRD BEARBEITET


Der Übersetzer beginnt mit Durchgang 1, indem er das gegebene Eingabeskript und alle Skripte (Dateien) analysiert
namens *.stp) in einem Tapset-Verzeichnis gefunden. Die mit aufgeführten Verzeichnisse -I werden verarbeitet
Sequenz, jeweils im „Guru-Modus“ verarbeitet. Für jedes Verzeichnis gibt es eine Reihe von Unterverzeichnissen
werden auch gesucht. Diese Unterverzeichnisse werden von der ausgewählten Kernel-Version abgeleitet (der
-R Option), damit mehr Kernel-Versions-spezifische Skripte weniger überschreiben können
bestimmte. Zum Beispiel für eine Kernel-Version 2.6.12-23.FC3 die folgenden Muster
würde nacheinander durchsucht werden: 2.6.12-23.FC3/*.stp, unterstützt, unterstützt, und schlussendlich
*.stp. Wenn Sie den Übersetzer nach Durchgang 1 stoppen, werden die Parse-Bäume gedruckt.

In Durchgang 2 analysiert der Übersetzer das Eingabeskript, um Symbole und Typen aufzulösen.
Verweise auf Variablen, Funktionen und Sondenaliase, die intern nicht aufgelöst werden, sind
zufrieden gestellt, indem die analysierten Tapset-Skriptdateien durchsucht werden. Falls vorhanden, Tapset-Skriptdatei
ausgewählt wird, weil es ein unaufgelöstes Symbol definiert, dann gilt dies für die gesamte Datei
zur Lösungswarteschlange des Übersetzers hinzugefügt. Dieser Prozess wird wiederholt, bis alle Symbole vorhanden sind
behoben und eine Teilmenge der Tapset-Skriptdateien wird ausgewählt.

Als nächstes werden alle Sondenpunktbeschreibungen anhand der großen Vielfalt validiert, die von unterstützt wird
Übersetzer. Sondenpunkte, die sich auf Codepositionen beziehen („synchrone Sondenpunkte“)
erfordern die Installation der entsprechenden Kernel-Debugging-Informationen. Im zugehörigen
Probe-Handler, zielseitige Variablen (deren Namen mit „$“ beginnen) werden gefunden und haben
ihre Laufzeitorte entschlüsselt.

Anschließend werden alle Sonden und Funktionen auf Optimierungsmöglichkeiten analysiert
Entfernen Sie Variablen, Ausdrücke und Funktionen, die keinen nützlichen Wert und keine Nebenwirkung haben.
Es wird davon ausgegangen, dass eingebettete C-Funktionen Nebenwirkungen haben, es sei denn, sie enthalten die magische Zeichenfolge
/* auch */. Da diese Optimierung latente Codefehler wie Typkonflikte verbergen kann
oder ungültige $context-Variablen, kann es manchmal sinnvoll sein, die Optimierungen zu deaktivieren
an. Nach der Installation können Sie HEIC-Dateien mit der -u .

Abschließend werden alle Variablen-, Funktions-, Parameter-, Array- und Indextypen abgeleitet
Kontext (Literale und Operatoren). Wenn Sie den Übersetzer nach Durchgang 2 stoppen, wird er aufgelistet
alle Sonden, Funktionen und Variablen sowie alle abgeleiteten Typen. Irgendwelche Inkonsistenzen
oder nicht aufgelöste Typen verursachen einen Fehler.

In Durchgang 3 schreibt der Übersetzer C-Code, der die Aktionen aller ausgewählten Skripte darstellt
Dateien und erstellt eine Make-Datei um das in ein Kernelobjekt einzubauen. Diese Dateien werden platziert
in ein temporäres Verzeichnis. Wenn Sie den Übersetzer an dieser Stelle stoppen, wird die Datei gedruckt
Inhalt der C-Datei.

In Durchgang 4 ruft der Übersetzer das Linux-Kernel-Build-System auf, um das eigentliche zu erstellen
Kernel-Objektdatei. Dazu gehört Laufen um im temporären Verzeichnis und erfordert a
Das Kernel-Modul-Build-System (Header, Konfiguration und Makefiles) muss wie gewohnt installiert werden
Stelle /lib/modules/VERSION/build. Das Stoppen des Übersetzers nach Durchgang 4 ist die letzte Chance
bevor Sie das Kernelobjekt ausführen. Dies kann nützlich sein, wenn Sie die Datei archivieren möchten.

In Durchgang 5 ruft der Übersetzer das Hilfsprogramm systemtap auf staprun Programm für die
gegebenes Kernelobjekt. Dieses Programm lädt das Modul und kommuniziert dann mit ihm.
Kopieren von Trace-Daten vom Kernel in temporäre Dateien, bis der Benutzer einen Interrupt sendet
Signal. Jeder Laufzeitfehler, der von den Probe-Handlern festgestellt wird, z. B. das Fehlen von Ressourcen
Speicher, Division durch Null, Überschreitung der Verschachtelungs- oder Laufzeitgrenzen führen zu einem Soft-Fehler
Indikation. Soft-Fehler, die über den MAXERRORS-Block aller nachfolgenden Tests hinausgehen (außer
Fehlerbehandlungs-Probes) und beenden Sie die Sitzung. Endlich, staprun entlädt das Modul,
und räumt auf.

ABNORMAL KÜNDIGUNG
Man sollte es vermeiden, den Stap-Prozess gewaltsam zu beenden, zum Beispiel mit SIGKILL, weil der
stapio-Prozess (ein untergeordneter Prozess des stap-Prozesses) und das geladene Modul kann übrig bleiben
läuft auf dem System. Wenn dies geschieht, senden Sie SIGTERM oder SIGINT an alle verbleibenden Stapios
Prozesse, dann verwenden Sie rmmod, um das Systemtap-Modul zu entladen.

Beispiele:


Weitere Informationen im Stapex(3stap) Handbuchseite für eine kurze Sammlung von Beispielen oder einen großen Satz davon
installierte Beispiele in den Systemtap-Dokumentations-/Testsuite-Verzeichnissen. Sehen
Stufenpfade(7stap) für den wahrscheinlichen Standort dieser auf dem System.

CACHEN


Der Systemtap-Übersetzer speichert die Ausgabe von Durchgang 3 (den generierten C-Code) und Durchgang 4 zwischen
Ausgabe (das kompilierte Kernelmodul), wenn Durchgang 4 erfolgreich abgeschlossen wird. Diese zwischengespeicherte Ausgabe
wird wiederverwendet, wenn dasselbe Skript erneut übersetzt wird, vorausgesetzt, dass dieselben Bedingungen vorliegen (gleiche
Kernel-Version, gleiche Systemtap-Version usw.). Zwischengespeicherte Dateien werden im gespeichert
$SYSTEMTAP_DIR/cache Verzeichnis. Der Cache kann durch die Datei begrenzt werden Cache_MB_Limit
Wird im Cache-Verzeichnis (siehe oben) abgelegt und enthält nur eine ASCII-Ganzzahl, die Folgendes darstellt
wie viele MiB der Cache nicht überschreiten sollte. Wenn diese Datei nicht vorhanden ist, wird eine Standarddatei verwendet
erstellt mit einem Limit von 256 MB. Dies ist eine „weiche“ Grenze für den Cache
Bereinigt, nachdem ein neuer Eintrag hinzugefügt wurde, wenn das Cache-Reinigungsintervall überschritten wird, also die Gesamtsumme
Die Cachegröße kann diesen Grenzwert vorübergehend überschreiten. Dieses Intervall kann mit angegeben werden
Datei cache_clean_interval_s im Cache-Verzeichnis abgelegt (siehe oben), das nur eine enthält
ASCII-Ganzzahl, die das Intervall in Sekunden darstellt. In Ermangelung dieser Datei ein Standard
wird mit einem auf 300 s eingestellten Intervall erstellt.

SICHERHEIT UND SICHERHEIT


Systemtap kann als leistungsstarkes Verwaltungstool verwendet werden. Es kann Kernel-intern offenlegen
Datenstrukturen und potenziell private Benutzerinformationen. (In dyninst Laufzeitmodus, dies
ist nicht der Fall, siehe die WECHSELN LAUFZEITEN Abschnitt unten.)

Der Übersetzer macht während der Kompilierung viele Sicherheitsbeschränkungen geltend und während der Ausführung noch mehr.
Zeit. Ziel ist es, sicherzustellen, dass keine Handler-Routine sehr lange laufen und grenzenlos zuweisen kann
Speicher beschädigen, unsichere Vorgänge ausführen oder unbeabsichtigt das System beeinträchtigen. Verwendet
der globalen Variablen des Skripts werden zum Schutz je nach Bedarf automatisch lese- und schreibgeschützt
gegen Manipulation durch gleichzeitige Sondenhandler. (Deadlocks werden mit Timeouts erkannt.
Verwenden Sie das -t Flag, um Berichte über übermäßige Sperrenkonflikte zu erhalten.) Experimentieren mit
Skripte sind daher im Allgemeinen Safe. Der Guru-Modus -g Mit dieser Option können Administratoren Folgendes tun:
die meisten Sicherheitsmaßnahmen umgehen, was invasive oder zustandsverändernde Vorgänge ermöglicht,
eingebetteter C-Code und erhöht das Risiko einer Störung. Standardmäßig ist die Überlastungsverhinderung aktiviert
für alle Module aktiviert. Wenn Sie die Überlastverarbeitung deaktivieren möchten, verwenden Sie die
--suppress-time-limits .

Fehler, die zur Laufzeit abgefangen werden, führen normalerweise zu einem sauberen Herunterfahren des Skripts und einem Pass-5
Fehlermeldung. Der --suppress-handler-errors Mit dieser Option können Skripte weiche Fehler tolerieren
ohne herunterzufahren.

Zulassungen
Für die normale Linux-Kernel-Modul-Laufzeit, um die Kernel-Objekte auszuführen, die Systemtap erstellt, a
Der Benutzer muss einer der folgenden sein:

· der Root-Benutzer;

· ein Mitglied der stapdev und stapusr Gruppen;

· ein Mitglied der Stapsie und stapusr Gruppen; oder

· ein Mitglied der stapusr Gruppe.

Der Root-Benutzer oder ein Benutzer, der Mitglied beider ist stapdev und stapusr Gruppen bilden können
und führen Sie ein beliebiges Systemtap-Skript aus.

Ein Benutzer, der Mitglied beider ist Stapsie und stapusr Gruppen können nur vorgefertigte Dateien verwenden
Module unter folgenden Bedingungen:

· Das Modul wurde von einem vertrauenswürdigen Unterzeichner signiert. Vertrauenswürdige Unterzeichner sind normalerweise Systemtap
Kompilierungsserver, die Module signieren, wenn die --Privileg Option wird durch angegeben
Klient. Siehe die stap-server(8) Handbuchseite für weitere Informationen.

· Das Modul wurde mit erstellt --privilege=stapsys oder unter der --privilege=stapusr nach.

Mitglieder nur der stapusr Die Gruppe kann nur die folgenden vorgefertigten Module verwenden
Voraussetzungen:

· Das Modul befindet sich im Verzeichnis /lib/modules/VERSION/systemtap. Dieses Verzeichnis
muss im Besitz von root sein und darf nicht weltweit beschreibbar sein.

or

· Das Modul wurde von einem vertrauenswürdigen Unterzeichner signiert. Vertrauenswürdige Unterzeichner sind normalerweise Systemtap
Kompilierungsserver, die Module signieren, wenn die --Privileg Option wird durch angegeben
Klient. Siehe die stap-server(8) Handbuchseite für weitere Informationen.

· Das Modul wurde mit der Option --privilege=stapusr erstellt.

Die von generierten Kernelmodule tippe Programm werden von der ausgeführt staprun Programm. Letzteres
ist Teil des Systemtap-Pakets und dient dem Laden und Entladen von Modulen (jedoch nur in
die weiße Zone) und die Datenübertragung vom Kernel zum Benutzer. Seit staprun führt keine durch
Zusätzliche Sicherheitsüberprüfungen der bereitgestellten Kernelobjekte wären für a unklug
Geben Sie dem Systemadministrator die Möglichkeit, nicht vertrauenswürdige Benutzer zum hinzuzufügen stapdev or stapusr Gruppen.

SICHERER STARTVORGANG
Wenn auf dem aktuellen System SecureBoot in der UEFI-Firmware aktiviert ist, sind alle Kernelmodule aktiviert
muss unterschrieben werden. (Einige Kernel erlauben möglicherweise die Deaktivierung von SecureBoot lange nach dem Booten mit a
Tastenfolge wie SysRq-X, wodurch das Signieren von Modulen überflüssig wird.) Der Systemtap
Der Kompilierungsserver kann Module mit einem MOK (Machine Owner Key) signieren, mit dem er gemeinsam hat
ein Client-System. Weitere Informationen finden Sie auf der folgenden Wiki-Seite:

https://sourceware.org/systemtap/wiki/SecureBoot

RESSOURCE GRENZEN
Viele Ressourcennutzungsgrenzen werden durch Makros im generierten C-Code festgelegt. Das kann sein
überschrieben mit -D Flaggen. Eine Auswahl davon ist wie folgt:

unterstützt
Maximale Anzahl verschachtelter Funktionsaufrufe. Standard durch Skriptanalyse ermittelt,
mit einem Bonus von 10 hinzugefügten Slots für rekursive Skripte.

unterstützt
Maximale Länge von Zeichenfolgen, Standard 128.

MAXTRYLOCK
Maximale Anzahl von Iterationen, die vor der Deklaration auf Sperren für globale Variablen warten
möglicher Deadlock und Überspringen des Tests, Standardwert 1000.

unterstützt
Maximale Anzahl von Anweisungen, die während eines einzelnen Sondentreffers ausgeführt werden sollen (mit
Interrupts deaktiviert), Standardwert 1000. Beachten Sie dies für Straight-Through-Probe-Handler
Da es aufgrund der Optimierung keine Schleifen oder Rekursionen gibt, kann dieser Parameter interpretiert werden
zu konservativ.

MAXACTION_INTERRUPTIBLE
Maximale Anzahl von Anweisungen, die während eines einzelnen Sondentreffers ausgeführt werden sollen
wird mit aktivierten Interrupts ausgeführt (z. B. Anfangs-/End-Prüfungen), standardmäßig (MAXACTION *
10).

MAXBACKTRACE
Maximale Anzahl von Stack-Frames, die von der Stap-Laufzeit verarbeitet werden
Unwinder, wie er von den Backtrace-Funktionen im [u]context-unwind.stp erzeugt wird
Tapsets, Standard 20.

MAXMAPENTRIES
Standardmäßige maximale Anzahl von Zeilen in einem einzelnen globalen Array, Standard 2048.
Stattdessen können einzelne Arrays mit einem größeren oder kleineren Limit deklariert werden:

global groß[10000],klein[5]

oder bezeichnet mit % damit sie automatisch umlaufen.

MAXFEHLER
Maximale Anzahl von Soft-Fehlern, bevor ein Exit ausgelöst wird, Standardwert 0, d. h
dass der erste Fehler das Skript beendet. Beachten Sie, dass mit dem
--suppress-handler-errors Option wird dieser Grenzwert nicht erzwungen.

MAXSKIPPED
Maximale Anzahl übersprungener Tests, bevor ein Exit ausgelöst wird, Standardwert 100. Läuft
systemtap mit -t (Timing)-Modus liefert weitere Details zu übersprungenen Sonden. Mit dem
Bei der Standardeinstellung -DINTERRUPTIBLE=1 gilt dies nicht für Prüfpunkte, die aufgrund von Wiedereintritt übersprungen werden
bis zu diesem Limit angesammelt. Beachten Sie, dass mit dem --suppress-handler-errors
Option wird dieser Grenzwert nicht erzwungen.

MINSTACKSPACE
Mindestanzahl an freien Kernel-Stack-Bytes, die zum Ausführen eines Probe-Handlers erforderlich sind.
Standardwert 1024. Diese Zahl sollte groß genug für die des Probe-Handlers sein
Bedarf, zuzüglich einer Sicherheitsmarge.

MAXUPROBES
Maximale Anzahl gleichzeitig aktivierter User-Space-Sonden (Uprobes), Standardeinstellung
größer als die Anzahl der im Skript genannten User-Space-Probepunkte. Dieser Pool
muss potenziell groß sein, da einzelne uprobe-Objekte (ca. 64 Byte)
werden jedem Prozess für jede passende Sonde auf Skriptebene zugewiesen.

STP_MAXMEMORY
Maximale Speichermenge (in Kilobyte), die das Systemtap-Modul verwenden soll,
standardmäßig unbegrenzt. Die Speichergröße umfasst die Größe des Moduls selbst plus
etwaige zusätzliche Zuweisungen. Dies verfolgt nur direkte Zuweisungen durch den Systemtap
Laufzeit. Dadurch werden indirekte Zuweisungen nicht verfolgt (wie dies durch kprobes/uprobes/etc. erfolgt).
Einbauten).

STP_OVEROAD_THRESHOLD, STP_OVERLOAD_INTERVAL
Maximale Anzahl von Maschinenzyklen, die in Probes auf einer CPU pro gegebenem Intervall verbracht werden,
bevor eine Überlastungsbedingung deklariert und das Skript heruntergefahren wird. Die Standardeinstellungen
sind 500 Millionen und 1 Milliarde, um den CPU-Verbrauch des Stap-Skripts auf etwa zu begrenzen
50%.

unterstützt
Größe der procfs-Probe-Lesepuffer (in Bytes). Standardmäßig ist unterstützt. Dies
Der Wert kann mit dem Procfs-Lese-Probe auf Pro-Procfs-Dateibasis überschrieben werden
.maxsize(MAXSIZE) Parameters.

Bei Skripten, die Sonden auf einem beliebigen Interrupt-Pfad enthalten, ist es möglich, dass diese
Interrupts können während eines anderen Probe-Handlers auftreten. Die Sonde im Interrupt
Der Handler würde in diesem Fall übersprungen, um einen erneuten Eintritt zu vermeiden. Um dieses Problem zu umgehen,
Führen Sie stap mit der Option aus -DINTERRUPTIBLE=0 um Unterbrechungen in der gesamten Sonde zu maskieren
Handler. Dies erhöht zwar den Aufwand für die Sonden, kann jedoch einen Wiedereintritt verhindern
für häufige Problemfälle. Allerdings werden Sonden in NMI-Handlern und im Callpath des Staps geprüft
Die Laufzeit kann aufgrund eines erneuten Eintritts immer noch übersprungen werden.

Mehrere Skripte können gleichzeitig Daten in einen Relay-Puffer schreiben. Ein Host-Skript stellt bereit
eine Schnittstelle für den Zugriff auf seinen Relay-Puffer für Gastskripte. Dann ist die Ausgabe des
Gäste werden in die Ausgabe des Hosts eingefügt. Um ein Skript als Host auszuführen, führen Sie stap aus
mit -DRELAYHOST[=Name] Option. Die Name identifiziert Ihr Host-Skript unter mehreren Hosts.
Führen Sie beim Ausführen des Hosts stap mit aus -DRELAYGUEST[=Name] um ein Gastskript zum hinzuzufügen
Gastgeber. Beachten Sie, dass Sie Gäste entladen müssen, bevor Sie einen Host entladen. Wenn einige Gäste da sind
Wenn eine Verbindung zum Host besteht, schlägt das Entladen des Hosts fehl.

Für den Fall, dass etwas schief geht tippe or staprun nachdem eine Sonde bereits gestartet wurde
Beim Ausführen kann man beide Benutzerprozesse sicher beenden und den aktiven Probe-Kernel entfernen
Modul mit rmmod. Alle ausstehenden Trace-Nachrichten gehen möglicherweise verloren.

UNTERPRIVILIGIERT NUTZER


Systemtap legt Kernel-interne Datenstrukturen und potenziell private Benutzer offen
Information. Aus diesem Grund ist die Nutzung aller Systemtap-Funktionen auf Root beschränkt
und an Benutzer, die Mitglieder der Gruppen stapdev und stapusr sind.

Allerdings kann ein eingeschränkter Satz von Systemtap-Funktionen vertrauenswürdigen,
unprivilegierte Benutzer. Diese Benutzer sind nur Mitglieder der Gruppe stapusr oder Mitglieder der
Gruppen stapusr und stapsys. Diese Benutzer können Systemtap-Module laden, die bereits erstellt wurden
kompiliert und zertifiziert von einem vertrauenswürdigen Systemtap-Compile-Server. Siehe die Beschreibungen der
Optionen --Privileg und --use-server. Sehen README.unprivileged im Systemtap-Quellcode
Informationen zum Einrichten eines vertrauenswürdigen Kompilierungsservers finden Sie hier.

Die Einschränkungen werden durchgesetzt, wenn --privilege=stapsys angegeben sind, sollen verhindern
unprivilegierte Benutzer von:

· Das System böswillig schädigen.

Die Einschränkungen werden durchgesetzt, wenn --privilege=stapusr angegeben sind, sollen verhindern
unprivilegierte Benutzer von:

· Das System böswillig schädigen.

· Zugang zu Informationen erhalten, die einem normalerweise nicht zugänglich wären
unprivilegierter Benutzer.

· Störung der Leistung von Prozessen, die anderen Benutzern des Systems gehören.
Ein gewisser Mehraufwand für das System im Allgemeinen ist unvermeidbar, da es nicht privilegiert ist
Die Sonden des Benutzers werden zu den entsprechenden Zeiten ausgelöst. Was wir möchten
Vermeiden ist die gezielte Unterbrechung der Prozesse eines anderen Benutzers, die dies nicht tun würden
Normalerweise ist dies für einen unprivilegierten Benutzer möglich.

SONDE RESTRICTIONS
Ein Mitglied der Gruppen stapusr und stapsys darf alle Sondenpunkte verwenden.

Ein Mitglied nur der Gruppe stapusr darf nur die folgenden Sonden verwenden:

· beginnen, beginnen(n)

· Ende, Ende(n)

· Fehler(n)

· niemals

· Prozess.*, wobei der Zielprozess dem Benutzer gehört.

· Timer.{jiffies,s,sec,ms,msec,us,usec,ns,nsec}(n)*

· timer.hz(n)

SCRIPT SPRACHE RESTRICTIONS
Die folgenden Funktionen der Skriptsprache stehen nicht allen nichtprivilegierten Benutzern zur Verfügung:

· jede Funktion, die durch die Guru-Modus-Option (-g) aktiviert wird.

· eingebetteter C-Code.

LAUFZEIT RESTRICTIONS
Für alle unprivilegierten Benutzer gelten folgende Laufzeitbeschränkungen:

· Nur der Standard-Laufzeitcode (siehe -R) könnte genutzt werden.

Zusätzliche Einschränkungen gelten nur für Mitglieder der Gruppe stapusr:

· Das Prüfen von Prozessen, die anderen Benutzern gehören, ist nicht gestattet.

· Der Zugriff auf den Kernel-Speicher (Lesen und Schreiben) ist nicht gestattet.

COMMAND LINE zur Auswahl RESTRICTIONS
Einige Befehlszeilenoptionen bieten Zugriff auf Funktionen, die nicht für alle verfügbar sein müssen
unprivilegierte Benutzer:

· -g darf nicht angegeben werden.

· Die folgenden Optionen dürfen vom Compile-Server-Client nicht verwendet werden:

-a, -B, -D, -I, -r, -R

RESTRICTIONS
Die folgenden Umgebungsvariablen dürfen nicht für alle unprivilegierten Benutzer gesetzt werden:

SYSTEMTAP_RUNTIME
SYSTEMTAP_TAPSET
SYSTEMTAP_DEBUGINFO_PATH

TAPSET RESTRICTIONS
Im Allgemeinen stehen Tapset-Funktionen nur Mitgliedern der Gruppe stapusr zur Verfügung, wenn sie
Sammeln Sie keine Informationen darüber, dass ein normales Programm mit den Berechtigungen dieses Benutzers ausgeführt wird
würde der Zugriff darauf verweigert werden.

Es gibt zwei Kategorien unprivilegierter Tapset-Funktionen. Die erste Kategorie besteht aus
Dienstprogrammfunktionen, die allen Benutzern bedingungslos zur Verfügung stehen; Dazu gehören solche
Dinge wie:

cpu:long ()
Ausfahrt ()
str_replace:string (prnt_str:string, srch_str:string, rplc_str:string)

Die zweite Kategorie besteht aus sogenannten myproc-unprivileged Funktionen, die nur können
sammeln Informationen innerhalb ihrer eigenen Prozesse. Skripte, die diese Funktionen nutzen möchten
muss das Ergebnis der Tapset-Funktion testen is_myproc und rufen Sie diese Funktionen nur auf, wenn die
Das Ergebnis ist 1. Das Skript wird sofort beendet, wenn eine dieser Funktionen von einem aufgerufen wird
unprivilegierter Benutzer innerhalb einer Probe innerhalb eines Prozesses, der nicht diesem Benutzer gehört.
Beispiele myproc-unprivileged Funktionen umfassen:

print_usyms (stk:string)
user_int:long (addr:long)
usymname:string (addr:long)

Ein Kompilierungsfehler wird ausgelöst, wenn eine Funktion nicht in eine der oben genannten Kategorien fällt
Wird nur von Mitgliedern der Gruppe stapusr verwendet.

Keine anderen integrierten Tapset-Funktionen dürfen nur von Mitgliedern der Gruppe stapusr verwendet werden.

WECHSELN LAUFZEITEN


Wie oben beschrieben umfasst der Standardlaufzeitmodus von systemtap das Erstellen und Laden des Kernels
Module, wobei verschiedene Sicherheitskompromisse vorgestellt werden. Systemtap enthält jetzt eine neue
Prototyp-Backend, ausgewählt mit --runtime=dyninst, das Dyninst verwendet, um a zu instrumentieren
Benutzereigene Prozesse zur Laufzeit. Dieses Backend verwendet keine Kernelmodule und tut dies auch nicht
erfordern Root-Rechte, sind jedoch hinsichtlich der Arten von Sonden und anderen eingeschränkt
Konstrukte, die ein Skript verwenden kann.

Die dyninst Die Laufzeit läuft im Target-Attach-Modus und erfordert daher eine -c COMMAND or -x
PID Verfahren. Zum Beispiel:

stap --runtime=dyninst -c 'stap -V' \
-e 'Prozess.Funktion prüfen("main")
{ println("Hallo von dyninst!") }'

Es kann erforderlich sein, eine in Konflikt stehende Selinux-Prüfung mit zu deaktivieren

# setseboolallow_execstack 1

EXIT STATUS


Der Systemtap-Übersetzer gibt bei Anforderung im Allgemeinen den Erfolgscode 0 zurück
Das Skript wurde im angeforderten Durchgang erfolgreich verarbeitet und ausgeführt. Ansonsten,
Fehler können an stderr ausgegeben werden und ein Fehlercode wird zurückgegeben. Verwenden -v or -vp N zu
Erhöhen Sie die Ausführlichkeit (global oder pro Durchgang), um die Ursache des Problems zu identifizieren.

Im Listenmodus (-l und -L) werden Fehlermeldungen normalerweise unterdrückt. Ein Erfolgscode von 0
wird zurückgegeben, wenn mindestens eine passende Sonde gefunden wurde.

Ein Skript, das in Durchgang 5 ausgeführt wird und mit ^C / SIGINT unterbrochen wird, gilt als
erfolgreich.

MISSBILLIGUNG


Im Laufe der Zeit können sich einige Funktionen der Skriptsprache und der Tapset-Bibliothek verändern
inkompatible Änderungen, so dass ein Skript, das für eine alte Version von Systemtap geschrieben wurde, möglicherweise nicht funktioniert
längere Laufzeit. In diesen Fällen kann es hilfreich sein, systemtap mit auszuführen --kompatibel VERSION
Flag, das die letzte bekannte funktionierende Version angibt. Ausführen von systemtap mit dem
--check-version Flag gibt eine Warnung aus, wenn möglicherweise inkompatible Elemente vorliegen
analysiert. Details zur Einstellungshistorie finden Sie in der NEWS-Datei.

Nutzen Sie stap online über die Dienste von onworks.net


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad




×
Werbung
❤ ️Hier einkaufen, buchen oder kaufen – kostenlos, damit die Dienste kostenlos bleiben.