Handbuch zur dynamischen Ablaufverfolgung in Solaris

Beispiele für die anonyme Ablaufverfolgung

Das folgende Beispiel zeigt eine anonyme DTrace-Aktivierung für jeden Prüfpunkt im Modul iprb(7D):


# dtrace -A -m iprb
dtrace: saved anonymous enabling in /kernel/drv/dtrace.conf
dtrace: added forceload directives to /etc/system
dtrace: run update_drv(1M) or reboot to enable changes
# reboot

Nach dem Neustart gibt dtrace(7D) auf der Konsole eine Meldung aus, die Sie darüber informiert, dass die angegebenen Prüfpunkte aktiviert werden:


  ...
  Copyright 1983-2003 Sun Microsystems, Inc.  All rights reserved.
  Use is subject to license terms.
  NOTICE: enabling probe 0 (:iprb::)
  NOTICE: enabling probe 1 (dtrace:::ERROR)
  configuring IPv4 interfaces: iprb0.
  ...

Nachdem das System neu gestartet ist, kann der anonyme Status durch Angabe der Option -a mit dtrace verbraucht werden.


# dtrace -a
  CPU     ID                    FUNCTION:NAME
    0  22954                      _init:entry
    0  22955                     _init:return
    0  22800                  iprbprobe:entry
    0  22934          iprb_get_dev_type:entry
    0  22935         iprb_get_dev_type:return
    0  22801                 iprbprobe:return
    0  22802                 iprbattach:entry
    0  22874               iprb_getprop:entry
    0  22875              iprb_getprop:return
    0  22934          iprb_get_dev_type:entry
    0  22935         iprb_get_dev_type:return
    0  22870             iprb_self_test:entry
    0  22871            iprb_self_test:return
    0  22958            iprb_hard_reset:entry
    0  22959           iprb_hard_reset:return
    0  22862       iprb_get_eeprom_size:entry
    0  22826              iprb_shiftout:entry
    0  22828            iprb_raiseclock:entry
    0  22829           iprb_raiseclock:return
  ...

Das folgende Beispiel konzentriert sich auf die aus iprbattach() aufgerufenen Funktionen. Geben Sie das folgende Skript in einen Texteditor ein und speichern Sie es unter dem Namen iprb.d.

fbt::iprbattach:entry
{
	self->trace = 1;
}

fbt:::
/self->trace/
{}

fbt::iprbattach:return
{
	self->trace = 0;
}

Führen Sie die folgenden Befehle aus, um die vorigen Einstellungen aus der Treiberkonfigurationsdatei zu löschen, die neue Anforderung einer anonymen Ablaufverfolgung zu installieren und das System neu zu starten:


# dtrace -AFs iprb.d
dtrace: cleaned up old anonymous enabling in /kernel/drv/dtrace.conf
dtrace: cleaned up forceload directives in /etc/system
dtrace: saved anonymous enabling in /kernel/drv/dtrace.conf
dtrace: added forceload directives to /etc/system
dtrace: run update_drv(1M) or reboot to enable changes
# reboot

Nach dem Neustart gibt dtrace(7D) eine andere Meldung auf der Konsole aus, die auf die geringfügig abweichende Aktivierung hinweist:


  ...
  Copyright 1983-2003 Sun Microsystems, Inc.  All rights reserved.
  Use is subject to license terms.
  NOTICE: enabling probe 0 (fbt::iprbattach:entry)
  NOTICE: enabling probe 1 (fbt:::)
  NOTICE: enabling probe 2 (fbt::iprbattach:return)
  NOTICE: enabling probe 3 (dtrace:::ERROR)
  configuring IPv4 interfaces: iprb0.
  ...

Wenn das System vollständig gebootet hat, führen Sie dtrace mit der Option -a und der Option -e aus. Dadurch werden die anonymen Daten verbraucht und der Vorgang wird beendet.


# dtrace -ae
  CPU FUNCTION
    0  -> iprbattach
    0    -> gld_mac_alloc
    0      -> kmem_zalloc
    0        -> kmem_cache_alloc
    0          -> kmem_cache_alloc_debug
    0            -> verify_and_copy_pattern
    0            <- verify_and_copy_pattern
    0            -> tsc_gethrtime
    0            <- tsc_gethrtime
    0            -> getpcstack
    0            <- getpcstack
    0            -> kmem_log_enter
    0            <- kmem_log_enter
    0          <- kmem_cache_alloc_debug
    0        <- kmem_cache_alloc
    0      <- kmem_zalloc
    0    <- gld_mac_alloc
    0    -> kmem_zalloc
    0      -> kmem_alloc
    0        -> vmem_alloc
    0          -> highbit
    0          <- highbit
    0          -> lowbit
    0          <- lowbit
    0          -> vmem_xalloc
    0            -> highbit
    0            <- highbit
    0            -> lowbit
    0            <- lowbit
    0            -> segkmem_alloc
    0              -> segkmem_xalloc
    0                -> vmem_alloc
    0                  -> highbit
    0                  <- highbit
    0                  -> lowbit
    0                  <- lowbit
    0                  -> vmem_seg_alloc
    0                    -> highbit
    0                    <- highbit
    0                    -> highbit
    0                    <- highbit
    0                    -> vmem_seg_create
  ...