Scroll to navigation

WARNING::DEBUGINFO(7stap) WARNING::DEBUGINFO(7stap)

JMÉNO

warning::debuginfo - varování ohledně chybějících ladicích informací

POPIS

Pro mnoho symbolických sondážních operací potřebuje systemtap ladicí informace DWARF generované kompilátorem při použití CFLAGS -g. Obvykle jsou ladicí informace potřeba pro nalezení sond pro funkce, příkazy, nebo kontextové proměnné. Ladicí informace se mohou nacházet buď přímo v binárních souborech, nebo mohou být odděleny do samostatných souborů, které se hledají v závislosti na nastavení proměnné prostředí SYSTEMTAP_DEBUGINFO_PATH.

Ověřte zda jsou pro vaši distribuci dostupné "debuginfo" balíčky s ladicími informacemi. Pokud tyto balíčky k dispozici nemáte, může být nutné programy, které chcete analyzovat, znovu sestavit tak, aby obsahovaly také ladicí informace DWARF.

Systemtap používá knihovnu elfutils ke zpracování ELF/DWARF souborů. Použitá verze elfutils odpovídá číslu za lomítkem ve výstupu příkazu stap-V output:

% stap -V
Systemtap translator/driver (version 2.3/0.156, rpm 2.3-1.fc19)
Copyright (C) 2005-2014 Red Hat, Inc. and others
[...]

Ukazuje, že systemtap byl sestaven s elfutls verze 0.156.

Pro skripty, které analyzují linuxové jádro, může systemtap potřebovat příslušný soubor vmlinux vzniklý při sestavování jádra. Poznamenejme, že zde nejde o zkomprimovaný soubor vmlinuz , na který se odkazuje boot loader, a ze kterého byly ladicí informace odstraněny. Soubor vmlinux je značně větší, než vmlinuz. Pokud sestavujete jádro ručně, ujistěte se, že máte zapnutou volbu CONFIG_DEBUG_INFO=y. Navíc některé linuxové distribuce mohou poskytovat více variant jádra a pro každou variantu samostatný balíček s ladicími informacemi. Příkladem takové varianty je kernel-debug, varianta s matoucím názvem, která má vlastní kernel-debug-debuginfo balíček (což není totéž jako kernel-debuginfo obsahující ladicí informace pro balíček kernel). Program stap-prep může pomoci s instalací správných balíčků.

Pro SystemTap skripty, které analyzují uživatelské procesy, může systemtap potřebovat příslušné ladicí informace také. Pokud analyzujete ručně sestavený program, použijte pro jeho překlad CFLAGS=-g -O2 .

Na některých systémech mohou binární soubory obsahovat podmnožinu obvyklých ladicích informací pro sledování funkcí a generovaní výpisů 'backtrace'. Tohle tzv. 'MiniDebugInfo' představuje xz zkomprimovanou ELF sekci .gnu_debugdata. MiniDebugInfo je podporováno elfutils 0.156, nebo novější verze.

Na některých systémech mohou být ladicí informace dostupné v komprimované formě v rámci sekcí .zdebug_*. Elfutils 0.153 a novější verze obsahují podporu podporu pro tyto komprimované ladicí informace.

V některých případech lze skript upravit tak, aby ladicí informace nepotřeboval. Například skript, který používá probe syscall.* lze obvykle přepsat na skript založený na probe nd_syscall.*, non-DWARF sondách, které používají složitější (ale také křehčí) mechanizmus pro přístup k argumentům systémových volání. Další možností je použití zakompilovaných značek typu 'tracepoint', které jsou dostupné v linuxovém jádře, nebo využít značky <sys/sdt.h> pro uživatelské procesy. Ty nejsou založeny na ladicích informacích. Pokud jsou ladicí informace potřebné k vyhodnocení složitějších výrazů typu $var->foo->bar mělo by být možné použít zápis @cast(var,"foo","foo.h")->foo->bar čímž dojde k syntéze ladicích informací z hlavičkových souborů.

AUTOMATIZACE

Na některých platformách může systemtap doporučit, které příkazy spustit pro stažení ladicích informací. Také je možné použít přepínač --download-debuginfo flag. Program stap-prep může být schopen potřebné balíčky stáhnout a nainstalovat. Další možností je použít stap-server pro kompilaci na vzdáleném stroji, kde mohou být ladicí informace centralizovány. V tomto případě použijte volbu stap --use-server.

VIZ TÉŽ

gcc(1),
stap(1),
stappaths(7),
stap-server(8),
stap-prep(1),
strip(1),
warning::symbols(7stap),
error::dwarf(7stap),
error::reporting(7stap),
error::contextvars(7stap),
http://elfutils.org/,
http://fedoraproject.org/wiki/Features/MiniDebugInfo