SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
www.lauterbach.com ▪ 1/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
lo strumento più completo per
il debug di un sistema linux
BetterEmbedded 2013 Maurizio Menegotto, Lauterbach Italia
TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 2/50
Agenda
 Lauterbach overview
 Linux debugging
 Debugging linux components
 Stop-mode & run-mode debugging
 Trace, performance, profiling
www.lauterbach.com ▪ 3/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Lauterbach è il principale produttore mondiale di strumenti di
sviluppo e debug per microprocessori embedded
Lauterbach è una azienda tedesca che con oltre 30 anni di attività e oltre
100.000 postazioni di debug installate nel mondo, si è affermata come il
leader mondiale per gli embedded debug tools ad alte prestazioni.
Lauterbach ARCONE Technology Center, Germania
Lauterbach company overview
www.lauterbach.com ▪ 4/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
TRACE32 product line overview
TRACE32 PowerTools
I PowerTools sono i più avanzati hw/sw debugger oggi disponibili.
Sono sistemi modulari e universali che supportano debug-port e
trace-port di molte diverse cpu e architetture.
TRACE32 PowerView
PowerView è l’ambiente integrato di debug e l’interfaccia universale
per tutti i sistemi Lauterbach. PowerView supporta qualsiasi CPU,
compiler e RTOS/Kernel e integra le funzionalità di trace e analisi più
sofisticate: statistic, performance, profiling, code-coverage.
www.lauterbach.com ▪ 5/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
TRACE32 product line overview
In Circuit Debuggers
PowerDebug USB-3
• Sistema entry level
• Link USB2/USB3
PowerDebug ETH
• Sistema standard
• Link USB + Eth 10/100 mbps
• Espandibile a PowerTrace
PowerDebug II
• Sistema di seconda generazione
• Link USB + Eth 10/100/1000 mbps
• Espandibile a PowerTrace II
Debug Cables
• Supporto per ogni CPU
• Supporto per ogni debug-port
• Probes attivi ad alta velocità
• Compatibili con tutti i PowerDebug
Un sistema di debug modulare
basato su unità PowerDebug
universali a cui si collegano diversi
debug cables per le diverse
architetture e debug-port
www.lauterbach.com ▪ 6/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
TRACE32 product line overview
In Circuit Trace
Un sistema debug+trace modulare
basato su unità PowerTrace a cui
collegare diversi debug cables e trace
probes per le diverse architetture e le
diverse trace-port
PowerTrace
• Sistema di prima generazione
• 256/512MB trace storage
• > 350 Mhz trace clock
PowerTrace II
• Sistema di nuova generazione
• 1/2/4 GB trace storage
• > GHz trace clock (HSTP)
• Capacità Trace Streaming
PowerDebug Combiprobe
• Sistema a basso costo
• 128MB trace storage
• 200 Mhz trace clock
• 1-4 bit trace port
Trace Probes
Autofocus
• Parallel trace
ETM/NEXUS, …
• Serial Trace
HSTP Aurora, …
www.lauterbach.com ▪ 7/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
TRACE32 product line overview
Logic Analyzers
Qualsiasi PowerDebug e PowerTrace può essere notevolmente
potenziato con l’aggiunta di un logic/protocol analyzer integrato:
PowerIntegrator.
Può essere usato per:
PowerIntegrator II
• Max 256000 K-Sample
• Max 102 canali
• Max 500 Mhz
• Stimuli Generator
PowerIntegrator
• 512 K-Sample
• Max 204 canali
• Max 500Mhz
• I/O timing & trigger
• Analizzatore di protocolli
CAN, FlexRay, LIN, SPI, USB,
I2C, Jtag, Seriale, PCI, DigRF, …
• Data logger
• Energy test
• Bus-trace
per cpu senza trace port
Probes
• Digitali e Analogici
• Per protocolli
• Per bus memorie
TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 8/50
Agenda
 Lauterbach overview
 Linux debugging
 Debugging linux components
 Stop-mode & run-mode debugging
 Trace, performance, profiling
www.lauterbach.com ▪ 9/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Nei moderni sistemi embedded, sempre
più di frequente si ricorre all’utilizzo di
sistemi operativi, tra i sistemi free/open-
source il kernel più utilizzato è Linux.
Un sistema embedded basato su Linux
pone diversi problemi dal punto di vista del
debug, in quanto è costituito di molti
elementi diversi e possiede caratteristiche
avanzate che complicano la vita del
debugger, come l’on-demand paging e la
gestione dinamica dell’MMU.
Linux debugging
I debugger free o economici sono in genere
utilizzabili per una di queste componenti ma
non per altre e costringono l’utente a
districarsi tra tecniche di debug poco
omogenee e frequenti ricompilazioni.
Linux system components
Instrumentation,
printk, printf,
kgdb, gdb…
console,
ethernet,
serial port
www.lauterbach.com ▪ 10/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Un sistema professionale Lauterbach TRACE32 consente il debug di ogni
componente Linux, da uboot al kernel, dai moduli alle librerie dinamiche, dai processi
ai threads.
Linux debugging, una soluzione unica
uboot
Linux
threads
kernel
modules
drivers
shared libs
Linux System
Network
process
process
xloader
CPU
threadsprocess
threads
shared libs
Flash
TRACE32 PowerView dà una vista immediata e
completa dell’intero sistema, con un singolo
debugger, nella stessa sessione di debug, sia in
stop-mode che run-mode.
www.lauterbach.com ▪ 11/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Per il debuggare un sistema ARM/Linux con TRACE32 servono:
Linux debugging, che cosa serve:
Il tuo computer Il tuo TRACE32 Il tuo target
PowerDebug HW con
JTAG debug cable per
ARM/Cortex
Target board
ARM/Cortex
con JTAG port
Qong by Dave SRL
• PC Linux o Windows
• La tua applicazione Linux
• TRACE32 PowerView SW
 Nota: l’applicazione e il kernel devono essere compilati con i debug symbols!
www.lauterbach.com ▪ 12/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
PowerDebug JTAG debugger
Ethernet or USB link
Powerview debugger
L’unica connessione fisica al target necessaria per il debug è la porta JTAG.
TRACE32 ha il controllo del target sin dal power-on reset.
JTAG Cable
Linux debugging, connessione:
E’ possibile avviare il debugging
del sistema Linux già presente in
flash, oppure caricato in memoria
da TRACE32 stesso.
target board
TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 13/50
Agenda
 Lauterbach overview
 Linux debugging
 Debugging linux components
 Stop-mode & run-mode debugging
 Trace, performance, profiling
www.lauterbach.com ▪ 14/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: booting
Attivando la sessione di debug TRACE32 può prendere il controllo del target sin
dal boot e mostrare il programma in memoria, fermo all’entry point
Si possono caricare i
simboli del bootloader
(Xloader, Uboot, …)
E procedere al debug source-level di tutto ciò che esegue prima di Linux
T32 DEMO
www.lauterbach.com ▪ 15/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: kernel start
Tipicamente un bootloder inizializza l’hardware
e lo configura per l’esecuzione del sistema
operativo.
L’immagine del kernel Linux (uImage) viene
caricata in RAM dal bootloader (uboot) oppure
anche dal debugger stesso.
Avviando il kernel si può continuare il
debug dall’entry point di Linux
Terminal emulator
integrato in TRACE32
T32 DEMO
www.lauterbach.com ▪ 16/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: kernel symbols
Se avvio Linux e fermo l’esecuzione con un BREAK vedrò il programma in
esecuzione ad indirizzi 0xCxxxxxxx
Si possono caricare i
simboli del kernel
(elf/dwarf file vmlinux)
0xCxxxxxxx è l’indirizzo logico
di esecuzione del kernel linux
www.lauterbach.com ▪ 17/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: kernel debugging
Con i simboli (vmlinux) si può fare il debug source-level del kernel: si possono
mettere breakpoint, eseguire in step, vedere funzioni, registri, variabili statiche e
locali nello strack-frame …
T32 DEMO
www.lauterbach.com ▪ 18/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: linux aware debugging
Il debug del kernel si può fare con un JTAG debugger anche non specifico per
Linux. L’intero blocco kernel può essere considerato come un singolo programma
(solo molto grosso).
COMUNQUE questo non è sufficiente per debuggare un intero sistema Linux
 Come si può fare il debugging dei «dynamic objects» come i processi, threads,
librerie e moduli del kernel?
 E’ necessario considerare il memory management (MMU) di CPU e kernel
 Il debugger deve essere conscio del sistema operativo in esecuzione. Deve dare
una vista delle risorse di Linux e comandi specifici per il loro debug.
Tutto questo è gestito dall’estensione
TRACE32 Linux Awareness
www.lauterbach.com ▪ 19/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: Memory Management (1)
 Le diverse componenti del sistema sono fisicamente in memoria a indirizzi
assoluti, ma eseguono a indirizzi virtuali
 Il kernel ha una traslazione Virtual-Physical fissa
 I processi hanno traslazioni Virtual-Physical dinamiche ed eseguono negli
stessi indirizzi virtuali
Virtual
Memory
Physical
Memory
0xC0000000
0xBF000000
0x00000000
userspacekernelspace
User space
Process 1
Memory page 2 p1
TLB
(MMU)
Memory page 3 p1
Memory page 1 p1
Memory page 2 p1
Memory page 1 p1
Memory page 3 p1
Memory page 1 p2
Process 2
Kernel modules
kernel
kernel
Memory page 1 p2
0x80000000
0x8000…
0x8000…
www.lauterbach.com ▪ 20/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: Memory Management (2)
 Durante il debugging l’utente utilizza indirizzi logici per accedere a
programmi, dati, simboli caricati in memoria virtuale *
 Il core e i debugger possono normalmente accedere alle sole pagine di
memoria attive (TLB)
 TRACE32 può accedere l’intera memoria fisica anche a indirizzi assoluti
 Se una zona memoria virtuale non è accessibile, TRACE32 ne calcola la
traslazione fisico-logica e vi accede comunque con indirizzo fisico
In questo modo TRACE32 permette all’utente di accedere in
ogni momento in debug a qualsiasi area di memoria
utilizzando indirizzi virtuali
* gli indirizzi virtuali (logici) corrispondono ai simboli del programma
www.lauterbach.com ▪ 21/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: Address Extension
Space-id = 0x0000 : kernel thread Space-id = 0x02F4 : user process PID 0x02F4
Come distinguere tra kernel e processi e tra i diversi processi?
 In Linux, lo space-id di un processo è il PID del main thread
 Tutti i threads del kernel hanno lo space-id zero
 TRACE32 usa l’identificatore space-id per distinguere tra diversi processi
 L’Address Extension viene abilitata dal comando
SYStem.Option MMUSPACES ON
T32 DEMO
www.lauterbach.com ▪ 22/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: linux menu
Grazie al Memory Management e all’Address Extension TRACE32 consente il
debug di qualsiasi componente di un sistema Linux.
 Debugging the kernel
 Debugging kernel modules
 Debugging processes/threads
 Debugging libraries
 Automatically loading and unloading
symbols for kernel modules,
processes and libraries
 Display kernel information
(file systems, kernel log, device tree…)TRACE32 Linux Awareness menu
www.lauterbach.com ▪ 23/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debug Module on init
1
2
3
Debugging linux components: kernel module
T32 DEMO
www.lauterbach.com ▪ 24/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debug Process on main
1
2
Non appena il processo viene
avviato il debugger ne carica i
simboli e si ferma in break al main()
3
3
Debugging linux components: process (1)
www.lauterbach.com ▪ 25/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Process Debugging – Watch Processes (autoloader)
Aggiungendo un processo alla “watch” list, i suoi simboli verranno
automaticamente caricati/cancellati al suo start/exit
add helloloop
to watch list
Start
helloloop
symbols
loaded
symbols
deleted
Debugging linux components: process (2)
www.lauterbach.com ▪ 26/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Display task specific information
Debugging linux components: process (3)
TRACE32 può mostrare informazioni specifiche di qualsiasi processo o thread
www.lauterbach.com ▪ 27/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: process (4)
TRACE32 può mostrare il contesto di
esecuzione (programma, dati, registri)
di qualsiasi processo o thread anche
se sospeso o se si è fermi in break
altrove
T32 DEMO
www.lauterbach.com ▪ 28/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
TASK.sYmbol.LOADLIB <process_name> <lib_name>
Debugging linux components: library
TRACE32 può caricare i simboli di qualsiasi libreria utilizzata da un processo e
consentirne il debugging
T32 DEMO
www.lauterbach.com ▪ 29/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: file system informations
TRACE32 può mostrare informazioni dettagliate sui file systems
www.lauterbach.com ▪ 30/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Debugging linux components: kernel log
TRACE32 può mostrare il Kernel Log accedendo direttamente in memoria
al kernel ring buffer
www.lauterbach.com ▪ 31/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
TRACE32 può mostrare il Device Tree Blob (se usato)
Debugging linux components: device tree
www.lauterbach.com ▪ 32/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
TRACE32 debugging linux
User
process in
debug
Symbols List
User process
registers, stack
Message
area
Current
process
Kernel
space code
Process
infos
Process
list
Terminal
emulator
(console)
Linux
debug
menu
User process
variables
Space-id &
address
Program
counter
www.lauterbach.com ▪ 33/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
TRACE32 PowerView per linux/QT
E‘ disponibile una nuova versione di TRACE32 PowerView per linux con interfaccia
grafica QT. Questa nuova versione software TRACE32 si affianca alla vecchia
versione linux/Motif e sono disponibili entrambe.
Nuova GUI QT
Vecchia GUI Motif
TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 34/50
Agenda
 Lauterbach overview
 Linux debugging
 Debugging linux components
 Stop-mode & run-mode debugging
 Trace, performance, profiling
www.lauterbach.com ▪ 35/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
threads
uboot
Linux
kernel
modules
drivers
shared libs
PowerDebug JTAG debugger
Linux System
Ethernet
or USB
TRACE32 Powerview
JTAG
process
xloader
JTAG CPU
Che cosa si intende per «stop-mode debugging» ?
 Debugging via JTAG
 Il “break” agisce sulla CPU e ferma l’intero sistema Linux
incluso kernel, drivers, processi
 Il debugger ha accesso a tutte le componenti
del sistema Linux
 Non è necessario eseguire alcun monitor o
agente o modificare il kernel: il debugger
accede a cpu memoria e registri direttamente
threads
process
shared libs
www.lauterbach.com ▪ 36/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
 Debugging tramite un canale di comunicazione: seriale, ethernet
 Il “break” agisce solo sul processo in debug. Tutte le altre componenti del
sistema Linux rimangono in esecuzione
 Il debugger ha accesso solo al processo in
debug
 gdbserver esegue nel sistema per implementare
le funzionalità di debug (è un target agent)
Che cosa si intende per «run-mode debugging» ?
threads
uboot
Linux
kernel
modules
drivers
shared libs
Linux System
process
xloader
CPU
gdbserver
Ethernet or Serial
Network
TRACE32 Powerview
funziona anche come
front-end debugger
per gdbserver
TRACE32 Powerview
threads
process
shared libs
www.lauterbach.com ▪ 37/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
 Run-mode debugging tramite il canale di comunicazione JTAG DCC/DAP,
non servono link ethernet o seriali, non servono drivers: solo JTAG
 Nel target esegue t32server che istanzia più
sessioni di debug gdbserver
 Il debugger può avviare/fermare i processi e
accedere ad alcune risorse linux (es. file system)
 Il debugger ha accesso simultaneo a tutti
i processi in fase di debug
Advanced «run-mode debugging»
threads
uboot
Linux
kernel
modules
drivers
shared libs
Linux System
process
xloader
CPU
gdbserver
TRACE32 Powerview
Ethernet
or USB
DCC
or DAPJTAG
gdbserver
t32server
linux info
file system
threads
process
shared libs
www.lauterbach.com ▪ 38/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
 Integrazione di stop-mode debugging e run-mode debugging via JTAG DCC/DAP
 TRACE32 può commutare da stop-mode a
run-mode e viceversa in ogni momento
nella stessa sessione di debug
 Combina il meglio delle due modalità di debug
consentendo di scegliere il miglior approccio
per risolvere rapidamente ogni problema
Integrated stop-mode & run-mode debugging
threads
uboot
Linux
threads
kernel
modules
drivers
shared libs
Linux System
process process
xloader
gdbserver
TRACE32 Powerview
Ethernet
or USB
DCC
or DAP
gdbserver
t32server
shared libs
JTAG
CPUJTAG
Run-mode debug
Stop-mode debug
T32 DEMO
TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 39/50
Agenda
 Lauterbach overview
 Linux debugging
 Debugging linux components
 Stop-mode & run-mode debugging
 Trace, performance, profiling
www.lauterbach.com ▪ 40/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Che cosa è il trace?
Lauterbach ha realizzato diversi trace-probes
per supportarle entrambe
Per “trace” si intende un sistema per la registrazione in tempo reale
del flusso di istruzioni eseguite e dei dati letti/scritti dalla CPU.
La maggior parte dei chip sono dotati di una trace-port attraverso la
quale viene trasmesso all’esterno il flusso trace: off-chip trace
Nei i core ARM/Cortex la off-chip trace port si chiama ETM
(Embedded Trace Macrocell). Si tratta di una porta parallela o seriale
ad alta velocità
www.lauterbach.com ▪ 41/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Off-chip trace ETM: recording
PowerTrace II
Trace Storage (up to 4 Gbyte)
TRACE32 PowerView
Trace Analysis
ARM/Cortex chip con
debug-port e trace-port
Ethernet
or USB
La trace port trasmette in tempo reale e in forma compressa informazioni sul
flusso programma e dati. Il metodo non ha particolari restrizioni:
JTAGTRACE
ARM/Cortex chip
• Richiede pochi pin
• Permette velocità elevatissime
• Consente trigger, filtering, data trace
CORE
ETM Trace
Generation
Debug Port
Trace Flow ETMRecording
www.lauterbach.com ▪ 42/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Off-chip trace ETM: streaming
PowerTrace II
Trace FIFO Buffer (up to 4GB)
TRACE32 PowerView
Trace Analysis
ARM/Cortex chip con
debug-port e trace-port
Normalmente il trace viene registrato nel PowerTrace che ha uno storage da
512MB a 4GB. Per prolungare illimitatamente il tempo di registrazione si usa il
TRACE STREAMING.
In questo modo il trace-flow viene compresso dal PowerTrace II e trasferito via
gigabit ethernet al host-pc dove viene registrato.
JTAGTRACE
ARM/Cortex chip
CORE
ETM Trace
Generation
Debug Port
Trace Flow ETMStreaming HW Compression
Gigabit
Ethernet
Hard Disk
up to 1 Tera
Frame
Recording
www.lauterbach.com ▪ 43/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Real-time trace con Linux
 La trasmissione del trace ETM è una funzionalità hardware del chip, non è
intrusivo e non richiede modifiche a Linux
 Il trace ETM trasmette gli indirizzi logici di esecuzione del programma.
Ma in Linux i processi eseguono tutti agli stessi indirizzi logici
Come distinguerli?
 E’ necessario catturare nel trace anche l’identificatore dei process switch
(space-id) in modo da associare il codice tracciato al componente del
sistema Linux corretto
www.lauterbach.com ▪ 44/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Trace con Linux: task switch
L’identificatore del task switch può essere facilmente catturato tracciando le
scritture alla variabile «current process», oppure tracciando il «contextID» che è
un registro ARM che Linux aggiorna ad ogni task switch.
Il valore scritto (task_struct *) identifica il processo e consente l’immediata
associazione del codice tracciato al componente del sistema Linux.
www.lauterbach.com ▪ 45/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Trace con Linux: task profiling
Task State
runtime chart
Task Timing
statistic
Task Scheduling
runtime chart
www.lauterbach.com ▪ 46/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Trace con Linux: code profiling
Statistic Tree
Analysis
Function tree profiling
of function «printk»
www.lauterbach.com ▪ 47/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Trace con Linux: code coverage (1)
Code coverage
by object files
Code coverage
by functions
www.lauterbach.com ▪ 48/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Trace con Linux: code coverage (2)
Code coverage
source code
level
T32 DEMO
www.lauterbach.com ▪ 49/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013
Trace assisted debugging: DOMANI ORE 12:30
Nel seminario di domani
dimostreremo come il trace
è di grande aiuto anche nel
normale debugging e di
come consente un enorme
risparmio di tempo.
Il trace è:
 Lo strumento che permette di “vedere” cosa accade
realmente durante l’esecuzione della vostra applicazione.
Deve essere considerato come:
 La miglior garanzia di scoprire e risolvere rapidamente i bug.
TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 50/50
Maurizio Menegotto
maurizio.menegotto@lauterbach.it
NO
SI
Risposte...
Grazie!
16:00 Coffee Break!
Per informazioni:
www.lauterbach.com
Domande?

Mais conteúdo relacionado

Mais procurados

Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Majong DevJfu
 
Sistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxSistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxTruelite
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
Oracle Application Server 10g
Oracle Application Server 10gOracle Application Server 10g
Oracle Application Server 10gPaolo Campegiani
 
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterMatteo Baccan
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneFulvio Corno
 
Richiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriRichiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriFulvio Corno
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Majong DevJfu
 
Sistemi Operativi: Componenti - Lezione 02
Sistemi Operativi: Componenti - Lezione 02Sistemi Operativi: Componenti - Lezione 02
Sistemi Operativi: Componenti - Lezione 02Majong DevJfu
 
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Majong DevJfu
 
I linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceI linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceBergamo Linux Users Group
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsGaetano Giunta
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Matteo Baccan
 
Virtualizzazione e Network Management Open Source
Virtualizzazione e Network Management Open SourceVirtualizzazione e Network Management Open Source
Virtualizzazione e Network Management Open SourceMarco Vanino
 

Mais procurados (20)

Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05
 
Conferenza Pymaemo
Conferenza PymaemoConferenza Pymaemo
Conferenza Pymaemo
 
Distro linux
Distro linuxDistro linux
Distro linux
 
Sistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxSistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente Linux
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
 
Cell Programming 1
Cell Programming 1Cell Programming 1
Cell Programming 1
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
 
Oracle Application Server 10g
Oracle Application Server 10gOracle Application Server 10g
Oracle Application Server 10g
 
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
 
Richiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriRichiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatori
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03
 
Sistemi Operativi: Componenti - Lezione 02
Sistemi Operativi: Componenti - Lezione 02Sistemi Operativi: Componenti - Lezione 02
Sistemi Operativi: Componenti - Lezione 02
 
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04
 
I linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceI linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-source
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez components
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
 
Virtualizzazione e Network Management Open Source
Virtualizzazione e Network Management Open SourceVirtualizzazione e Network Management Open Source
Virtualizzazione e Network Management Open Source
 

Destaque

Qt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni QtQt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni QtPaolo Sereno
 
Qt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmerQt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmerDeveler S.r.l.
 
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegateSviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegatePaolo Sereno
 
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiQt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiPaolo Sereno
 
Integrazione QML / C++
Integrazione QML / C++Integrazione QML / C++
Integrazione QML / C++Paolo Sereno
 
Qt roadmap: the future of Qt
Qt roadmap: the future of QtQt roadmap: the future of Qt
Qt roadmap: the future of QtDeveler S.r.l.
 
GUI in Gtk+ con Glade & Anjuta
GUI in Gtk+ con Glade & AnjutaGUI in Gtk+ con Glade & Anjuta
GUI in Gtk+ con Glade & Anjutadelfinostefano
 
Intro To React Native
Intro To React NativeIntro To React Native
Intro To React NativeFITC
 

Destaque (8)

Qt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni QtQt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
 
Qt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmerQt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmer
 
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegateSviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
 
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiQt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
 
Integrazione QML / C++
Integrazione QML / C++Integrazione QML / C++
Integrazione QML / C++
 
Qt roadmap: the future of Qt
Qt roadmap: the future of QtQt roadmap: the future of Qt
Qt roadmap: the future of Qt
 
GUI in Gtk+ con Glade & Anjuta
GUI in Gtk+ con Glade & AnjutaGUI in Gtk+ con Glade & Anjuta
GUI in Gtk+ con Glade & Anjuta
 
Intro To React Native
Intro To React NativeIntro To React Native
Intro To React Native
 

Semelhante a Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux

PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...LeonardoIurada
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspLaura Camellini
 
Linux Device Drivers
Linux Device DriversLinux Device Drivers
Linux Device DriversFabio Nisci
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistemaFulvio Corno
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerAlessandro Mascherin
 
TYPO3 CMS 6.2 LTS - Le Novità
TYPO3 CMS 6.2 LTS - Le NovitàTYPO3 CMS 6.2 LTS - Le Novità
TYPO3 CMS 6.2 LTS - Le NovitàRoberto Torresani
 
Linux Security Hardening - panoramica sui principi generali per la riduzione...
Linux  Security Hardening - panoramica sui principi generali per la riduzione...Linux  Security Hardening - panoramica sui principi generali per la riduzione...
Linux Security Hardening - panoramica sui principi generali per la riduzione...Marco Ferrigno
 
Hardening
HardeningHardening
HardeningNaLUG
 
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioniGalliate Linux User Group
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaAlessandro Selli
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embeddedDaniele Costarella
 
Jvm performance Tuning
Jvm performance TuningJvm performance Tuning
Jvm performance TuningMarco Sabatini
 
Installazione ambientepython ubuntumate
Installazione ambientepython ubuntumateInstallazione ambientepython ubuntumate
Installazione ambientepython ubuntumateMarco Buttolo
 

Semelhante a Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux (20)

PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcsp
 
Linux Device Drivers
Linux Device DriversLinux Device Drivers
Linux Device Drivers
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistema
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computer
 
TYPO3 CMS 6.2 LTS - Le Novità
TYPO3 CMS 6.2 LTS - Le NovitàTYPO3 CMS 6.2 LTS - Le Novità
TYPO3 CMS 6.2 LTS - Le Novità
 
Corso linux base
Corso linux baseCorso linux base
Corso linux base
 
Linux Security Hardening - panoramica sui principi generali per la riduzione...
Linux  Security Hardening - panoramica sui principi generali per la riduzione...Linux  Security Hardening - panoramica sui principi generali per la riduzione...
Linux Security Hardening - panoramica sui principi generali per la riduzione...
 
Hardening
HardeningHardening
Hardening
 
Modulo 1 - Lezione 2
Modulo 1 - Lezione 2Modulo 1 - Lezione 2
Modulo 1 - Lezione 2
 
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embedded
 
Ti base 2020b
Ti base 2020bTi base 2020b
Ti base 2020b
 
Ti base 2020
Ti base 2020Ti base 2020
Ti base 2020
 
Jvm performance Tuning
Jvm performance TuningJvm performance Tuning
Jvm performance Tuning
 
LUG - Ricompilazione kernel
LUG - Ricompilazione kernelLUG - Ricompilazione kernel
LUG - Ricompilazione kernel
 
Installazione ambientepython ubuntumate
Installazione ambientepython ubuntumateInstallazione ambientepython ubuntumate
Installazione ambientepython ubuntumate
 

Mais de Develer S.r.l.

Cloud computing, in practice ~ develer workshop
Cloud computing, in practice ~ develer workshopCloud computing, in practice ~ develer workshop
Cloud computing, in practice ~ develer workshopDeveler S.r.l.
 
Workshop su Android Kernel Hacking
Workshop su Android Kernel HackingWorkshop su Android Kernel Hacking
Workshop su Android Kernel HackingDeveler S.r.l.
 
BeRTOS Embedded Survey Summary 2011
BeRTOS Embedded Survey Summary 2011BeRTOS Embedded Survey Summary 2011
BeRTOS Embedded Survey Summary 2011Develer S.r.l.
 
Qt Quick for dynamic UI development
Qt Quick for dynamic UI developmentQt Quick for dynamic UI development
Qt Quick for dynamic UI developmentDeveler S.r.l.
 
Qt licensing: making the right choice
Qt licensing: making the right choiceQt licensing: making the right choice
Qt licensing: making the right choiceDeveler S.r.l.
 
Qt everywhere a c++ abstraction platform
Qt everywhere   a c++ abstraction platformQt everywhere   a c++ abstraction platform
Qt everywhere a c++ abstraction platformDeveler S.r.l.
 
PyQt: rapid application development
PyQt: rapid application developmentPyQt: rapid application development
PyQt: rapid application developmentDeveler S.r.l.
 
Hybrid development using Qt webkit
Hybrid development using Qt webkitHybrid development using Qt webkit
Hybrid development using Qt webkitDeveler S.r.l.
 
Smashing the bottleneck: Qt application profiling
Smashing the bottleneck: Qt application profilingSmashing the bottleneck: Qt application profiling
Smashing the bottleneck: Qt application profilingDeveler S.r.l.
 
Crossing the border with Qt: the i18n system
Crossing the border with Qt: the i18n systemCrossing the border with Qt: the i18n system
Crossing the border with Qt: the i18n systemDeveler S.r.l.
 
BeRTOS: Free Embedded RTOS
BeRTOS: Free Embedded RTOSBeRTOS: Free Embedded RTOS
BeRTOS: Free Embedded RTOSDeveler S.r.l.
 
Develer - Company Profile
Develer - Company ProfileDeveler - Company Profile
Develer - Company ProfileDeveler S.r.l.
 
Bettersoftware Feedback 2009
Bettersoftware Feedback 2009Bettersoftware Feedback 2009
Bettersoftware Feedback 2009Develer S.r.l.
 
Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer S.r.l.
 

Mais de Develer S.r.l. (18)

Sw libero rf
Sw libero rfSw libero rf
Sw libero rf
 
Engagement small
Engagement smallEngagement small
Engagement small
 
Farepipi
FarepipiFarepipi
Farepipi
 
Cloud computing, in practice ~ develer workshop
Cloud computing, in practice ~ develer workshopCloud computing, in practice ~ develer workshop
Cloud computing, in practice ~ develer workshop
 
Workshop su Android Kernel Hacking
Workshop su Android Kernel HackingWorkshop su Android Kernel Hacking
Workshop su Android Kernel Hacking
 
BeRTOS Embedded Survey Summary 2011
BeRTOS Embedded Survey Summary 2011BeRTOS Embedded Survey Summary 2011
BeRTOS Embedded Survey Summary 2011
 
Qt Quick in depth
Qt Quick in depthQt Quick in depth
Qt Quick in depth
 
Qt Quick for dynamic UI development
Qt Quick for dynamic UI developmentQt Quick for dynamic UI development
Qt Quick for dynamic UI development
 
Qt licensing: making the right choice
Qt licensing: making the right choiceQt licensing: making the right choice
Qt licensing: making the right choice
 
Qt everywhere a c++ abstraction platform
Qt everywhere   a c++ abstraction platformQt everywhere   a c++ abstraction platform
Qt everywhere a c++ abstraction platform
 
PyQt: rapid application development
PyQt: rapid application developmentPyQt: rapid application development
PyQt: rapid application development
 
Hybrid development using Qt webkit
Hybrid development using Qt webkitHybrid development using Qt webkit
Hybrid development using Qt webkit
 
Smashing the bottleneck: Qt application profiling
Smashing the bottleneck: Qt application profilingSmashing the bottleneck: Qt application profiling
Smashing the bottleneck: Qt application profiling
 
Crossing the border with Qt: the i18n system
Crossing the border with Qt: the i18n systemCrossing the border with Qt: the i18n system
Crossing the border with Qt: the i18n system
 
BeRTOS: Free Embedded RTOS
BeRTOS: Free Embedded RTOSBeRTOS: Free Embedded RTOS
BeRTOS: Free Embedded RTOS
 
Develer - Company Profile
Develer - Company ProfileDeveler - Company Profile
Develer - Company Profile
 
Bettersoftware Feedback 2009
Bettersoftware Feedback 2009Bettersoftware Feedback 2009
Bettersoftware Feedback 2009
 
Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione
 

Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux

  • 1. www.lauterbach.com ▪ 1/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 lo strumento più completo per il debug di un sistema linux BetterEmbedded 2013 Maurizio Menegotto, Lauterbach Italia
  • 2. TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 2/50 Agenda  Lauterbach overview  Linux debugging  Debugging linux components  Stop-mode & run-mode debugging  Trace, performance, profiling
  • 3. www.lauterbach.com ▪ 3/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Lauterbach è il principale produttore mondiale di strumenti di sviluppo e debug per microprocessori embedded Lauterbach è una azienda tedesca che con oltre 30 anni di attività e oltre 100.000 postazioni di debug installate nel mondo, si è affermata come il leader mondiale per gli embedded debug tools ad alte prestazioni. Lauterbach ARCONE Technology Center, Germania Lauterbach company overview
  • 4. www.lauterbach.com ▪ 4/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 TRACE32 product line overview TRACE32 PowerTools I PowerTools sono i più avanzati hw/sw debugger oggi disponibili. Sono sistemi modulari e universali che supportano debug-port e trace-port di molte diverse cpu e architetture. TRACE32 PowerView PowerView è l’ambiente integrato di debug e l’interfaccia universale per tutti i sistemi Lauterbach. PowerView supporta qualsiasi CPU, compiler e RTOS/Kernel e integra le funzionalità di trace e analisi più sofisticate: statistic, performance, profiling, code-coverage.
  • 5. www.lauterbach.com ▪ 5/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 TRACE32 product line overview In Circuit Debuggers PowerDebug USB-3 • Sistema entry level • Link USB2/USB3 PowerDebug ETH • Sistema standard • Link USB + Eth 10/100 mbps • Espandibile a PowerTrace PowerDebug II • Sistema di seconda generazione • Link USB + Eth 10/100/1000 mbps • Espandibile a PowerTrace II Debug Cables • Supporto per ogni CPU • Supporto per ogni debug-port • Probes attivi ad alta velocità • Compatibili con tutti i PowerDebug Un sistema di debug modulare basato su unità PowerDebug universali a cui si collegano diversi debug cables per le diverse architetture e debug-port
  • 6. www.lauterbach.com ▪ 6/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 TRACE32 product line overview In Circuit Trace Un sistema debug+trace modulare basato su unità PowerTrace a cui collegare diversi debug cables e trace probes per le diverse architetture e le diverse trace-port PowerTrace • Sistema di prima generazione • 256/512MB trace storage • > 350 Mhz trace clock PowerTrace II • Sistema di nuova generazione • 1/2/4 GB trace storage • > GHz trace clock (HSTP) • Capacità Trace Streaming PowerDebug Combiprobe • Sistema a basso costo • 128MB trace storage • 200 Mhz trace clock • 1-4 bit trace port Trace Probes Autofocus • Parallel trace ETM/NEXUS, … • Serial Trace HSTP Aurora, …
  • 7. www.lauterbach.com ▪ 7/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 TRACE32 product line overview Logic Analyzers Qualsiasi PowerDebug e PowerTrace può essere notevolmente potenziato con l’aggiunta di un logic/protocol analyzer integrato: PowerIntegrator. Può essere usato per: PowerIntegrator II • Max 256000 K-Sample • Max 102 canali • Max 500 Mhz • Stimuli Generator PowerIntegrator • 512 K-Sample • Max 204 canali • Max 500Mhz • I/O timing & trigger • Analizzatore di protocolli CAN, FlexRay, LIN, SPI, USB, I2C, Jtag, Seriale, PCI, DigRF, … • Data logger • Energy test • Bus-trace per cpu senza trace port Probes • Digitali e Analogici • Per protocolli • Per bus memorie
  • 8. TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 8/50 Agenda  Lauterbach overview  Linux debugging  Debugging linux components  Stop-mode & run-mode debugging  Trace, performance, profiling
  • 9. www.lauterbach.com ▪ 9/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Nei moderni sistemi embedded, sempre più di frequente si ricorre all’utilizzo di sistemi operativi, tra i sistemi free/open- source il kernel più utilizzato è Linux. Un sistema embedded basato su Linux pone diversi problemi dal punto di vista del debug, in quanto è costituito di molti elementi diversi e possiede caratteristiche avanzate che complicano la vita del debugger, come l’on-demand paging e la gestione dinamica dell’MMU. Linux debugging I debugger free o economici sono in genere utilizzabili per una di queste componenti ma non per altre e costringono l’utente a districarsi tra tecniche di debug poco omogenee e frequenti ricompilazioni. Linux system components Instrumentation, printk, printf, kgdb, gdb… console, ethernet, serial port
  • 10. www.lauterbach.com ▪ 10/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Un sistema professionale Lauterbach TRACE32 consente il debug di ogni componente Linux, da uboot al kernel, dai moduli alle librerie dinamiche, dai processi ai threads. Linux debugging, una soluzione unica uboot Linux threads kernel modules drivers shared libs Linux System Network process process xloader CPU threadsprocess threads shared libs Flash TRACE32 PowerView dà una vista immediata e completa dell’intero sistema, con un singolo debugger, nella stessa sessione di debug, sia in stop-mode che run-mode.
  • 11. www.lauterbach.com ▪ 11/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Per il debuggare un sistema ARM/Linux con TRACE32 servono: Linux debugging, che cosa serve: Il tuo computer Il tuo TRACE32 Il tuo target PowerDebug HW con JTAG debug cable per ARM/Cortex Target board ARM/Cortex con JTAG port Qong by Dave SRL • PC Linux o Windows • La tua applicazione Linux • TRACE32 PowerView SW  Nota: l’applicazione e il kernel devono essere compilati con i debug symbols!
  • 12. www.lauterbach.com ▪ 12/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 PowerDebug JTAG debugger Ethernet or USB link Powerview debugger L’unica connessione fisica al target necessaria per il debug è la porta JTAG. TRACE32 ha il controllo del target sin dal power-on reset. JTAG Cable Linux debugging, connessione: E’ possibile avviare il debugging del sistema Linux già presente in flash, oppure caricato in memoria da TRACE32 stesso. target board
  • 13. TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 13/50 Agenda  Lauterbach overview  Linux debugging  Debugging linux components  Stop-mode & run-mode debugging  Trace, performance, profiling
  • 14. www.lauterbach.com ▪ 14/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: booting Attivando la sessione di debug TRACE32 può prendere il controllo del target sin dal boot e mostrare il programma in memoria, fermo all’entry point Si possono caricare i simboli del bootloader (Xloader, Uboot, …) E procedere al debug source-level di tutto ciò che esegue prima di Linux T32 DEMO
  • 15. www.lauterbach.com ▪ 15/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: kernel start Tipicamente un bootloder inizializza l’hardware e lo configura per l’esecuzione del sistema operativo. L’immagine del kernel Linux (uImage) viene caricata in RAM dal bootloader (uboot) oppure anche dal debugger stesso. Avviando il kernel si può continuare il debug dall’entry point di Linux Terminal emulator integrato in TRACE32 T32 DEMO
  • 16. www.lauterbach.com ▪ 16/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: kernel symbols Se avvio Linux e fermo l’esecuzione con un BREAK vedrò il programma in esecuzione ad indirizzi 0xCxxxxxxx Si possono caricare i simboli del kernel (elf/dwarf file vmlinux) 0xCxxxxxxx è l’indirizzo logico di esecuzione del kernel linux
  • 17. www.lauterbach.com ▪ 17/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: kernel debugging Con i simboli (vmlinux) si può fare il debug source-level del kernel: si possono mettere breakpoint, eseguire in step, vedere funzioni, registri, variabili statiche e locali nello strack-frame … T32 DEMO
  • 18. www.lauterbach.com ▪ 18/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: linux aware debugging Il debug del kernel si può fare con un JTAG debugger anche non specifico per Linux. L’intero blocco kernel può essere considerato come un singolo programma (solo molto grosso). COMUNQUE questo non è sufficiente per debuggare un intero sistema Linux  Come si può fare il debugging dei «dynamic objects» come i processi, threads, librerie e moduli del kernel?  E’ necessario considerare il memory management (MMU) di CPU e kernel  Il debugger deve essere conscio del sistema operativo in esecuzione. Deve dare una vista delle risorse di Linux e comandi specifici per il loro debug. Tutto questo è gestito dall’estensione TRACE32 Linux Awareness
  • 19. www.lauterbach.com ▪ 19/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: Memory Management (1)  Le diverse componenti del sistema sono fisicamente in memoria a indirizzi assoluti, ma eseguono a indirizzi virtuali  Il kernel ha una traslazione Virtual-Physical fissa  I processi hanno traslazioni Virtual-Physical dinamiche ed eseguono negli stessi indirizzi virtuali Virtual Memory Physical Memory 0xC0000000 0xBF000000 0x00000000 userspacekernelspace User space Process 1 Memory page 2 p1 TLB (MMU) Memory page 3 p1 Memory page 1 p1 Memory page 2 p1 Memory page 1 p1 Memory page 3 p1 Memory page 1 p2 Process 2 Kernel modules kernel kernel Memory page 1 p2 0x80000000 0x8000… 0x8000…
  • 20. www.lauterbach.com ▪ 20/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: Memory Management (2)  Durante il debugging l’utente utilizza indirizzi logici per accedere a programmi, dati, simboli caricati in memoria virtuale *  Il core e i debugger possono normalmente accedere alle sole pagine di memoria attive (TLB)  TRACE32 può accedere l’intera memoria fisica anche a indirizzi assoluti  Se una zona memoria virtuale non è accessibile, TRACE32 ne calcola la traslazione fisico-logica e vi accede comunque con indirizzo fisico In questo modo TRACE32 permette all’utente di accedere in ogni momento in debug a qualsiasi area di memoria utilizzando indirizzi virtuali * gli indirizzi virtuali (logici) corrispondono ai simboli del programma
  • 21. www.lauterbach.com ▪ 21/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: Address Extension Space-id = 0x0000 : kernel thread Space-id = 0x02F4 : user process PID 0x02F4 Come distinguere tra kernel e processi e tra i diversi processi?  In Linux, lo space-id di un processo è il PID del main thread  Tutti i threads del kernel hanno lo space-id zero  TRACE32 usa l’identificatore space-id per distinguere tra diversi processi  L’Address Extension viene abilitata dal comando SYStem.Option MMUSPACES ON T32 DEMO
  • 22. www.lauterbach.com ▪ 22/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: linux menu Grazie al Memory Management e all’Address Extension TRACE32 consente il debug di qualsiasi componente di un sistema Linux.  Debugging the kernel  Debugging kernel modules  Debugging processes/threads  Debugging libraries  Automatically loading and unloading symbols for kernel modules, processes and libraries  Display kernel information (file systems, kernel log, device tree…)TRACE32 Linux Awareness menu
  • 23. www.lauterbach.com ▪ 23/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debug Module on init 1 2 3 Debugging linux components: kernel module T32 DEMO
  • 24. www.lauterbach.com ▪ 24/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debug Process on main 1 2 Non appena il processo viene avviato il debugger ne carica i simboli e si ferma in break al main() 3 3 Debugging linux components: process (1)
  • 25. www.lauterbach.com ▪ 25/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Process Debugging – Watch Processes (autoloader) Aggiungendo un processo alla “watch” list, i suoi simboli verranno automaticamente caricati/cancellati al suo start/exit add helloloop to watch list Start helloloop symbols loaded symbols deleted Debugging linux components: process (2)
  • 26. www.lauterbach.com ▪ 26/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Display task specific information Debugging linux components: process (3) TRACE32 può mostrare informazioni specifiche di qualsiasi processo o thread
  • 27. www.lauterbach.com ▪ 27/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: process (4) TRACE32 può mostrare il contesto di esecuzione (programma, dati, registri) di qualsiasi processo o thread anche se sospeso o se si è fermi in break altrove T32 DEMO
  • 28. www.lauterbach.com ▪ 28/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 TASK.sYmbol.LOADLIB <process_name> <lib_name> Debugging linux components: library TRACE32 può caricare i simboli di qualsiasi libreria utilizzata da un processo e consentirne il debugging T32 DEMO
  • 29. www.lauterbach.com ▪ 29/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: file system informations TRACE32 può mostrare informazioni dettagliate sui file systems
  • 30. www.lauterbach.com ▪ 30/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Debugging linux components: kernel log TRACE32 può mostrare il Kernel Log accedendo direttamente in memoria al kernel ring buffer
  • 31. www.lauterbach.com ▪ 31/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 TRACE32 può mostrare il Device Tree Blob (se usato) Debugging linux components: device tree
  • 32. www.lauterbach.com ▪ 32/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 TRACE32 debugging linux User process in debug Symbols List User process registers, stack Message area Current process Kernel space code Process infos Process list Terminal emulator (console) Linux debug menu User process variables Space-id & address Program counter
  • 33. www.lauterbach.com ▪ 33/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 TRACE32 PowerView per linux/QT E‘ disponibile una nuova versione di TRACE32 PowerView per linux con interfaccia grafica QT. Questa nuova versione software TRACE32 si affianca alla vecchia versione linux/Motif e sono disponibili entrambe. Nuova GUI QT Vecchia GUI Motif
  • 34. TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 34/50 Agenda  Lauterbach overview  Linux debugging  Debugging linux components  Stop-mode & run-mode debugging  Trace, performance, profiling
  • 35. www.lauterbach.com ▪ 35/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 threads uboot Linux kernel modules drivers shared libs PowerDebug JTAG debugger Linux System Ethernet or USB TRACE32 Powerview JTAG process xloader JTAG CPU Che cosa si intende per «stop-mode debugging» ?  Debugging via JTAG  Il “break” agisce sulla CPU e ferma l’intero sistema Linux incluso kernel, drivers, processi  Il debugger ha accesso a tutte le componenti del sistema Linux  Non è necessario eseguire alcun monitor o agente o modificare il kernel: il debugger accede a cpu memoria e registri direttamente threads process shared libs
  • 36. www.lauterbach.com ▪ 36/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013  Debugging tramite un canale di comunicazione: seriale, ethernet  Il “break” agisce solo sul processo in debug. Tutte le altre componenti del sistema Linux rimangono in esecuzione  Il debugger ha accesso solo al processo in debug  gdbserver esegue nel sistema per implementare le funzionalità di debug (è un target agent) Che cosa si intende per «run-mode debugging» ? threads uboot Linux kernel modules drivers shared libs Linux System process xloader CPU gdbserver Ethernet or Serial Network TRACE32 Powerview funziona anche come front-end debugger per gdbserver TRACE32 Powerview threads process shared libs
  • 37. www.lauterbach.com ▪ 37/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013  Run-mode debugging tramite il canale di comunicazione JTAG DCC/DAP, non servono link ethernet o seriali, non servono drivers: solo JTAG  Nel target esegue t32server che istanzia più sessioni di debug gdbserver  Il debugger può avviare/fermare i processi e accedere ad alcune risorse linux (es. file system)  Il debugger ha accesso simultaneo a tutti i processi in fase di debug Advanced «run-mode debugging» threads uboot Linux kernel modules drivers shared libs Linux System process xloader CPU gdbserver TRACE32 Powerview Ethernet or USB DCC or DAPJTAG gdbserver t32server linux info file system threads process shared libs
  • 38. www.lauterbach.com ▪ 38/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013  Integrazione di stop-mode debugging e run-mode debugging via JTAG DCC/DAP  TRACE32 può commutare da stop-mode a run-mode e viceversa in ogni momento nella stessa sessione di debug  Combina il meglio delle due modalità di debug consentendo di scegliere il miglior approccio per risolvere rapidamente ogni problema Integrated stop-mode & run-mode debugging threads uboot Linux threads kernel modules drivers shared libs Linux System process process xloader gdbserver TRACE32 Powerview Ethernet or USB DCC or DAP gdbserver t32server shared libs JTAG CPUJTAG Run-mode debug Stop-mode debug T32 DEMO
  • 39. TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 39/50 Agenda  Lauterbach overview  Linux debugging  Debugging linux components  Stop-mode & run-mode debugging  Trace, performance, profiling
  • 40. www.lauterbach.com ▪ 40/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Che cosa è il trace? Lauterbach ha realizzato diversi trace-probes per supportarle entrambe Per “trace” si intende un sistema per la registrazione in tempo reale del flusso di istruzioni eseguite e dei dati letti/scritti dalla CPU. La maggior parte dei chip sono dotati di una trace-port attraverso la quale viene trasmesso all’esterno il flusso trace: off-chip trace Nei i core ARM/Cortex la off-chip trace port si chiama ETM (Embedded Trace Macrocell). Si tratta di una porta parallela o seriale ad alta velocità
  • 41. www.lauterbach.com ▪ 41/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Off-chip trace ETM: recording PowerTrace II Trace Storage (up to 4 Gbyte) TRACE32 PowerView Trace Analysis ARM/Cortex chip con debug-port e trace-port Ethernet or USB La trace port trasmette in tempo reale e in forma compressa informazioni sul flusso programma e dati. Il metodo non ha particolari restrizioni: JTAGTRACE ARM/Cortex chip • Richiede pochi pin • Permette velocità elevatissime • Consente trigger, filtering, data trace CORE ETM Trace Generation Debug Port Trace Flow ETMRecording
  • 42. www.lauterbach.com ▪ 42/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Off-chip trace ETM: streaming PowerTrace II Trace FIFO Buffer (up to 4GB) TRACE32 PowerView Trace Analysis ARM/Cortex chip con debug-port e trace-port Normalmente il trace viene registrato nel PowerTrace che ha uno storage da 512MB a 4GB. Per prolungare illimitatamente il tempo di registrazione si usa il TRACE STREAMING. In questo modo il trace-flow viene compresso dal PowerTrace II e trasferito via gigabit ethernet al host-pc dove viene registrato. JTAGTRACE ARM/Cortex chip CORE ETM Trace Generation Debug Port Trace Flow ETMStreaming HW Compression Gigabit Ethernet Hard Disk up to 1 Tera Frame Recording
  • 43. www.lauterbach.com ▪ 43/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Real-time trace con Linux  La trasmissione del trace ETM è una funzionalità hardware del chip, non è intrusivo e non richiede modifiche a Linux  Il trace ETM trasmette gli indirizzi logici di esecuzione del programma. Ma in Linux i processi eseguono tutti agli stessi indirizzi logici Come distinguerli?  E’ necessario catturare nel trace anche l’identificatore dei process switch (space-id) in modo da associare il codice tracciato al componente del sistema Linux corretto
  • 44. www.lauterbach.com ▪ 44/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Trace con Linux: task switch L’identificatore del task switch può essere facilmente catturato tracciando le scritture alla variabile «current process», oppure tracciando il «contextID» che è un registro ARM che Linux aggiorna ad ogni task switch. Il valore scritto (task_struct *) identifica il processo e consente l’immediata associazione del codice tracciato al componente del sistema Linux.
  • 45. www.lauterbach.com ▪ 45/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Trace con Linux: task profiling Task State runtime chart Task Timing statistic Task Scheduling runtime chart
  • 46. www.lauterbach.com ▪ 46/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Trace con Linux: code profiling Statistic Tree Analysis Function tree profiling of function «printk»
  • 47. www.lauterbach.com ▪ 47/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Trace con Linux: code coverage (1) Code coverage by object files Code coverage by functions
  • 48. www.lauterbach.com ▪ 48/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Trace con Linux: code coverage (2) Code coverage source code level T32 DEMO
  • 49. www.lauterbach.com ▪ 49/50TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 Trace assisted debugging: DOMANI ORE 12:30 Nel seminario di domani dimostreremo come il trace è di grande aiuto anche nel normale debugging e di come consente un enorme risparmio di tempo. Il trace è:  Lo strumento che permette di “vedere” cosa accade realmente durante l’esecuzione della vostra applicazione. Deve essere considerato come:  La miglior garanzia di scoprire e risolvere rapidamente i bug.
  • 50. TRACE32 debugging linux ▪ Maurizio Menegotto ▪ Luglio 2013 www.lauterbach.com ▪ 50/50 Maurizio Menegotto maurizio.menegotto@lauterbach.it NO SI Risposte... Grazie! 16:00 Coffee Break! Per informazioni: www.lauterbach.com Domande?