SlideShare a Scribd company logo
Dynamic
Instrumentation
@JeffryMolanus @openebs
Golang Meetup Bangalore XXIV
15 July 2017
Tracing
• To record information about a programs execution
• Useful for understanding code, in particular a very large code base
• Used during debugging, statistics, so on and so forth
• Dynamic tracing is the ability to ad-hoc add or remove certain instrumentation without
making changes to the code that is subject to tracing or restarting the program or system
• In general, tracing should not effect the stability of the program that is being traced in
production, during development its less of importance
• When no tracing is enabled there should be no overhead; when enabled the overhead
depends on what is traced and how
• User land tracing requires abilities in kernel (which is the focus of this talk)
• user space tracing has a little more overhead due to the induced context switch
Tracers on other platforms
• Illumos/Solaris and FreeBSD
• Dtrace, very powerful and production safe used for many years
• Compressed Type Format (CTF) data is available in binaries and libraries, no
need for debug symbols to work with the types
• Solaris uses the same CTF data for type information for debugging
• Event Tracing for Windows (EWT)
• Linux
• Requires debug symbols to be downloaded depending on what you trace and how
specific you want to trace
• With DWARF data more can be done then with plain CTF however
Basic architecture of tracing
• There are generally, two parts of tracing in Linux
• Frontend tools to work/consume with/the in kernel tracing
facilities
• We will look briefly in ftrace, systemtap and BCC
• Backend subsystems
• Kernel code that executes what ever code you want to be
executed on entering the probes function or address
• kprobes, probes, tracepoints, sysdig
ftrace
• Tracepoints; static probes defined in the kernel that can be enabled at
run time
• ABI is kept stable by kernel
• static implies you have to know what you want to trace while
developing the code
• Makes use of sysfs interface to interact with it
• Several wrappers exist to make things a little easier
• tracecmd and kernelshark (UI)
• Also check the excellent stuff from Brendan Gregg
Adding a tracepoint
Trace points in sysfs
kernelshark
kprobes
• kprobes is defined in multiple sub categories
• jprobes: trace function entry (optimised for function entry, copy stack)
• kretprobes: trace function return
• kprobes: trace at any arbitrary instruction in the kernel
• To use it one has to write a kernel module which needs to be loaded at run
time
• this is not guaranteed to be safe
• A kprobe replaces the traced instruction with a break point instruction
• On entry, the pre_handler is called after instrumenting, the post handler
kprobes
Kprobe example
Kprobe example
jprobes
• Note: function
prototype needs to
match the actual
syscall
utrace/uprobes
• Roughly the the same as the kprobe facility in the kernel but focused
on user land tracing
• current ptrace() in linux is implemented using the utrace frame work
• tools like strace and GDB use ptrace()
• Allows for more sophisticated tooling, one of which is uprobes
• Trace points are placed on the an inode:offset tuple
• All binaries that map that address will have a SW breakpoint
injected at that address
ftrace & user space
• The same ftrace interface is available for working with uprobes
• Behind the scene the kernel does the right thing (e.g use kprobe,
tracepoints, or uprobes)
• The same sysfs interface is used, general work flow:
• Find address to place the probe on
• Enable probing
• Disable probing
• View results (flight recorder)
Dynamic Instrumentation- OpenEBS Golang Meetup July 2017
Dynamic Instrumentation- OpenEBS Golang Meetup July 2017
eBPF• Pretty sure everyone here has used
BPF likely with out knowing
• tcpdump uses BPF
• eBPF is enhanced BPF
• sandboxed byte code executed by
kernel which is safe and user
defined
• attach eBPF to kprobes and
uprobes
• certain restrictions in abilities
BCC
• BPF Compiler Collection,
compiles code for the in kernel
VM to be executed
• Several high level wrappers for
Python, lua and GO
• Code is still written in C
however
Recap
• Several back-end tracing capabilities in the kernel
• Tracepoints, kprobes, jprobes, kretprobes and uprobes
• eBPF allows attachment to kprobe, uprobes and tracepoints for
safe execution
• Linux tracing world can use better generic frontends for adhoc
tracing
• Best today are perf and systemtap (IMHO)
• Who wants to write C when you want to print a member of a
complex struct? (ply)
Systemtap
• High level scripting language to work with the aforementioned tracing
capabilities of Linux
• Flexible as it allows for writing scripts that can trace specific lines
within a file (debug symbols)
• Next to tracing, it can also make changes to running programs when
run in “guru mode”
• Resulting scripts from systemtap are kernel modules that are loaded
in to the kernel (kprobe and uprobes)
• Adding a eBPF target is in the works as currently, systemtap may
result in unremovable modules or sudden death of traced processes
stp files
• Example script oneliner:
• stap -e ‘probe syscall.open { printf(“exec %s, file%s, execname(),
filename) }’
• stap -L ‘syscall.open'
• syscall.open: __nr:long name:string filename:string flags:long
flags_str:string mode:long argstr:string
• List user space functions in process “trace”
• stap -L ‘process(“./trace").function("*")'
• .call and .return probes for each function
List probes
Tracing line numbers
• What's the value of ret after
line 35?
• Could be done by tracing ret
values, but that is not the
purpose of this exercise
• gcc -g -O0
• full debug info
Tracing line number
• .statement(“main@code/talk/trace.c:36”) { … }
Understanding code flow
Understanding code flow
Downstack
• All functions
being called by
a function
Tracing go
Cant trace return values
Calling convention
• AMD64 calling conventions
• RDI, RSI, RDX, RCX, R8 and R9
• Go is based on PLAN9 which uses a different approach therefore tracing does not work as
well as one would like it to be (yet)
• This also goes for debuggers
• Perhaps Go will start using the X86_64 ABI as it moves forward or all tools and debuggers
will add specific PLAN9 support
• https://go-review.googlesource.com/#/c/28832/ (ABI change?)
• GO bindings to the BCC tool chain
• Allows for creating eBPF tracing tools written in go
• but still requires writing the actual trace logic in C
Summary
• Dynamic tracing is an invaluable tool for
understanding code flow
• To verify hypotheses around software bugs or
understanding
• Ability to make changes to code on the fly with out
recompiling (guru mode)
• Under constant development most noticeable the
eBPF/BCC work

More Related Content

What's hot (20)

PDF
Linux Performance Analysis: New Tools and Old Secrets
Brendan Gregg
 
PDF
Micro control idsecconf2010
idsecconf
 
PDF
LMG Lightning Talks - SFO17-205
Linaro
 
PPTX
Demo
sean chen
 
PPTX
epoll() - The I/O Hero
Mohsin Hijazee
 
PPTX
0.5mln packets per second with Erlang
Maxim Kharchenko
 
PPT
Epoll - from the kernel side
llj098
 
PPTX
Os lectures
Adnan Ghafoor
 
PPT
Multicore
Birgit Plötzeneder
 
PDF
Exploit techniques and mitigation
Yaniv Shani
 
PDF
New Process/Thread Runtime
Linaro
 
PDF
Practical SystemTAP basics: Perl memory profiling
Lubomir Rintel
 
PDF
DCSF 19 eBPF Superpowers
Docker, Inc.
 
PDF
Embedded Erlang, Nerves, and SumoBots
Frank Hunleth
 
PPTX
Operating Systems - A Primer
Saumil Shah
 
PDF
Building a Network IP Camera using Erlang
Frank Hunleth
 
PDF
TFLite NNAPI and GPU Delegates
Koan-Sin Tan
 
PPT
Systemtap
Feng Yu
 
PDF
Is That A Penguin In My Windows?
zeroSteiner
 
PPTX
Vulnerability desing patterns
Peter Hlavaty
 
Linux Performance Analysis: New Tools and Old Secrets
Brendan Gregg
 
Micro control idsecconf2010
idsecconf
 
LMG Lightning Talks - SFO17-205
Linaro
 
Demo
sean chen
 
epoll() - The I/O Hero
Mohsin Hijazee
 
0.5mln packets per second with Erlang
Maxim Kharchenko
 
Epoll - from the kernel side
llj098
 
Os lectures
Adnan Ghafoor
 
Exploit techniques and mitigation
Yaniv Shani
 
New Process/Thread Runtime
Linaro
 
Practical SystemTAP basics: Perl memory profiling
Lubomir Rintel
 
DCSF 19 eBPF Superpowers
Docker, Inc.
 
Embedded Erlang, Nerves, and SumoBots
Frank Hunleth
 
Operating Systems - A Primer
Saumil Shah
 
Building a Network IP Camera using Erlang
Frank Hunleth
 
TFLite NNAPI and GPU Delegates
Koan-Sin Tan
 
Systemtap
Feng Yu
 
Is That A Penguin In My Windows?
zeroSteiner
 
Vulnerability desing patterns
Peter Hlavaty
 

Similar to Dynamic Instrumentation- OpenEBS Golang Meetup July 2017 (20)

PPTX
Modern Linux Tracing Landscape
Sasha Goldshtein
 
PPTX
Performance analysis and troubleshooting using DTrace
Graeme Jenkinson
 
PDF
DEF CON 27 - JEFF DILEO - evil e bpf in depth
Felipe Prado
 
PPTX
eBPF Basics
Michael Kehoe
 
PDF
CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...
CanSecWest
 
PDF
CNIT 127: Ch 18: Source Code Auditing
Sam Bowne
 
PPTX
Week1 Electronic System-level ESL Design and SystemC Begin
敬倫 林
 
PPTX
[CB16] COFI break – Breaking exploits with Processor trace and Practical cont...
CODE BLUE
 
PDF
Serving Deep Learning Models At Scale With RedisAI: Luca Antiga
Redis Labs
 
PDF
Systems Programming Assignment Help - Processes
HelpWithAssignment.com
 
PDF
DEF CON 27 - CHRISTOPHER ROBERTS - firmware slap
Felipe Prado
 
PDF
A Peek into TFRT
Koan-Sin Tan
 
PDF
Threads operating system slides easy understand
shamsulhuda34
 
PPTX
Practical Windows Kernel Exploitation
zeroSteiner
 
PPTX
Ice Age melting down: Intel features considered usefull!
Peter Hlavaty
 
PPTX
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
Alexandre Moneger
 
PPTX
Игорь Фесенко "Direction of C# as a High-Performance Language"
Fwdays
 
PDF
BPF - in-kernel virtual machine
Alexei Starovoitov
 
PPTX
The power of linux advanced tracer [POUG18]
Mahmoud Hatem
 
PDF
Linux Perf Tools
Raj Pandey
 
Modern Linux Tracing Landscape
Sasha Goldshtein
 
Performance analysis and troubleshooting using DTrace
Graeme Jenkinson
 
DEF CON 27 - JEFF DILEO - evil e bpf in depth
Felipe Prado
 
eBPF Basics
Michael Kehoe
 
CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...
CanSecWest
 
CNIT 127: Ch 18: Source Code Auditing
Sam Bowne
 
Week1 Electronic System-level ESL Design and SystemC Begin
敬倫 林
 
[CB16] COFI break – Breaking exploits with Processor trace and Practical cont...
CODE BLUE
 
Serving Deep Learning Models At Scale With RedisAI: Luca Antiga
Redis Labs
 
Systems Programming Assignment Help - Processes
HelpWithAssignment.com
 
DEF CON 27 - CHRISTOPHER ROBERTS - firmware slap
Felipe Prado
 
A Peek into TFRT
Koan-Sin Tan
 
Threads operating system slides easy understand
shamsulhuda34
 
Practical Windows Kernel Exploitation
zeroSteiner
 
Ice Age melting down: Intel features considered usefull!
Peter Hlavaty
 
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
Alexandre Moneger
 
Игорь Фесенко "Direction of C# as a High-Performance Language"
Fwdays
 
BPF - in-kernel virtual machine
Alexei Starovoitov
 
The power of linux advanced tracer [POUG18]
Mahmoud Hatem
 
Linux Perf Tools
Raj Pandey
 
Ad

More from OpenEBS (20)

PDF
Redis Conf 2019--Container Attached Storage for Redis
OpenEBS
 
PPTX
Replication and rebuild in cStor
OpenEBS
 
PPTX
Data Agility for Devops - OSI 2018
OpenEBS
 
PPTX
Introduction to cStor replica - Contributors Meet 5th Oct 2018
OpenEBS
 
PPTX
Running OpenEBS on GPDs - Weekly Contributors Meet 28th Sep 2018
OpenEBS
 
PDF
Container Attached Storage (CAS) with OpenEBS - SDC 2018
OpenEBS
 
PPTX
Volume Policies in OpenEBS 0.7
OpenEBS
 
PPTX
Thoughts on heptio's ark - Contributors Meet 21st Sept 2018
OpenEBS
 
PDF
Latest (storage IO) patterns for cloud-native applications
OpenEBS
 
PDF
Deploying OpenEBS with Availability Zones
OpenEBS
 
PDF
Kubernetes Monitoring and Troubleshooting using Weavescope- Kubernetes Meetup...
OpenEBS
 
PDF
OpenEBS Visualization and Monitoring using Weave-scope - Contributors Meet 1s...
OpenEBS
 
PDF
Container Attached Storage (CAS) with OpenEBS - Berlin Kubernetes Meetup - Ma...
OpenEBS
 
PDF
BDD Testing Using Godog - Bangalore Golang Meetup # 32
OpenEBS
 
PDF
Container Attached Storage - Chennai Kubernetes Meetup #2 - April 21st 2018
OpenEBS
 
PDF
Kubernetes Visualization-and-Monitoring-using-Weave-scope
OpenEBS
 
PDF
OpenEBS CAS SDC India - 2018
OpenEBS
 
PPTX
OpenEBS hangout #4
OpenEBS
 
PDF
Containerized Storage for Containers
OpenEBS
 
PDF
South Bay Kubernetes DevOps
OpenEBS
 
Redis Conf 2019--Container Attached Storage for Redis
OpenEBS
 
Replication and rebuild in cStor
OpenEBS
 
Data Agility for Devops - OSI 2018
OpenEBS
 
Introduction to cStor replica - Contributors Meet 5th Oct 2018
OpenEBS
 
Running OpenEBS on GPDs - Weekly Contributors Meet 28th Sep 2018
OpenEBS
 
Container Attached Storage (CAS) with OpenEBS - SDC 2018
OpenEBS
 
Volume Policies in OpenEBS 0.7
OpenEBS
 
Thoughts on heptio's ark - Contributors Meet 21st Sept 2018
OpenEBS
 
Latest (storage IO) patterns for cloud-native applications
OpenEBS
 
Deploying OpenEBS with Availability Zones
OpenEBS
 
Kubernetes Monitoring and Troubleshooting using Weavescope- Kubernetes Meetup...
OpenEBS
 
OpenEBS Visualization and Monitoring using Weave-scope - Contributors Meet 1s...
OpenEBS
 
Container Attached Storage (CAS) with OpenEBS - Berlin Kubernetes Meetup - Ma...
OpenEBS
 
BDD Testing Using Godog - Bangalore Golang Meetup # 32
OpenEBS
 
Container Attached Storage - Chennai Kubernetes Meetup #2 - April 21st 2018
OpenEBS
 
Kubernetes Visualization-and-Monitoring-using-Weave-scope
OpenEBS
 
OpenEBS CAS SDC India - 2018
OpenEBS
 
OpenEBS hangout #4
OpenEBS
 
Containerized Storage for Containers
OpenEBS
 
South Bay Kubernetes DevOps
OpenEBS
 
Ad

Recently uploaded (20)

PDF
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
PPTX
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
PDF
Per Axbom: The spectacular lies of maps
Nexer Digital
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PPTX
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
PPTX
Agentic AI in Healthcare Driving the Next Wave of Digital Transformation
danielle hunter
 
PDF
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PDF
State-Dependent Conformal Perception Bounds for Neuro-Symbolic Verification
Ivan Ruchkin
 
PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
PDF
GDG Cloud Munich - Intro - Luiz Carneiro - #BuildWithAI - July - Abdel.pdf
Luiz Carneiro
 
PPTX
Farrell_Programming Logic and Design slides_10e_ch02_PowerPoint.pptx
bashnahara11
 
PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PDF
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
PPTX
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
PDF
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
Per Axbom: The spectacular lies of maps
Nexer Digital
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
Agentic AI in Healthcare Driving the Next Wave of Digital Transformation
danielle hunter
 
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
State-Dependent Conformal Perception Bounds for Neuro-Symbolic Verification
Ivan Ruchkin
 
The Future of AI & Machine Learning.pptx
pritsen4700
 
GDG Cloud Munich - Intro - Luiz Carneiro - #BuildWithAI - July - Abdel.pdf
Luiz Carneiro
 
Farrell_Programming Logic and Design slides_10e_ch02_PowerPoint.pptx
bashnahara11
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 

Dynamic Instrumentation- OpenEBS Golang Meetup July 2017

  • 2. Tracing • To record information about a programs execution • Useful for understanding code, in particular a very large code base • Used during debugging, statistics, so on and so forth • Dynamic tracing is the ability to ad-hoc add or remove certain instrumentation without making changes to the code that is subject to tracing or restarting the program or system • In general, tracing should not effect the stability of the program that is being traced in production, during development its less of importance • When no tracing is enabled there should be no overhead; when enabled the overhead depends on what is traced and how • User land tracing requires abilities in kernel (which is the focus of this talk) • user space tracing has a little more overhead due to the induced context switch
  • 3. Tracers on other platforms • Illumos/Solaris and FreeBSD • Dtrace, very powerful and production safe used for many years • Compressed Type Format (CTF) data is available in binaries and libraries, no need for debug symbols to work with the types • Solaris uses the same CTF data for type information for debugging • Event Tracing for Windows (EWT) • Linux • Requires debug symbols to be downloaded depending on what you trace and how specific you want to trace • With DWARF data more can be done then with plain CTF however
  • 4. Basic architecture of tracing • There are generally, two parts of tracing in Linux • Frontend tools to work/consume with/the in kernel tracing facilities • We will look briefly in ftrace, systemtap and BCC • Backend subsystems • Kernel code that executes what ever code you want to be executed on entering the probes function or address • kprobes, probes, tracepoints, sysdig
  • 5. ftrace • Tracepoints; static probes defined in the kernel that can be enabled at run time • ABI is kept stable by kernel • static implies you have to know what you want to trace while developing the code • Makes use of sysfs interface to interact with it • Several wrappers exist to make things a little easier • tracecmd and kernelshark (UI) • Also check the excellent stuff from Brendan Gregg
  • 9. kprobes • kprobes is defined in multiple sub categories • jprobes: trace function entry (optimised for function entry, copy stack) • kretprobes: trace function return • kprobes: trace at any arbitrary instruction in the kernel • To use it one has to write a kernel module which needs to be loaded at run time • this is not guaranteed to be safe • A kprobe replaces the traced instruction with a break point instruction • On entry, the pre_handler is called after instrumenting, the post handler
  • 13. jprobes • Note: function prototype needs to match the actual syscall
  • 14. utrace/uprobes • Roughly the the same as the kprobe facility in the kernel but focused on user land tracing • current ptrace() in linux is implemented using the utrace frame work • tools like strace and GDB use ptrace() • Allows for more sophisticated tooling, one of which is uprobes • Trace points are placed on the an inode:offset tuple • All binaries that map that address will have a SW breakpoint injected at that address
  • 15. ftrace & user space • The same ftrace interface is available for working with uprobes • Behind the scene the kernel does the right thing (e.g use kprobe, tracepoints, or uprobes) • The same sysfs interface is used, general work flow: • Find address to place the probe on • Enable probing • Disable probing • View results (flight recorder)
  • 18. eBPF• Pretty sure everyone here has used BPF likely with out knowing • tcpdump uses BPF • eBPF is enhanced BPF • sandboxed byte code executed by kernel which is safe and user defined • attach eBPF to kprobes and uprobes • certain restrictions in abilities
  • 19. BCC • BPF Compiler Collection, compiles code for the in kernel VM to be executed • Several high level wrappers for Python, lua and GO • Code is still written in C however
  • 20. Recap • Several back-end tracing capabilities in the kernel • Tracepoints, kprobes, jprobes, kretprobes and uprobes • eBPF allows attachment to kprobe, uprobes and tracepoints for safe execution • Linux tracing world can use better generic frontends for adhoc tracing • Best today are perf and systemtap (IMHO) • Who wants to write C when you want to print a member of a complex struct? (ply)
  • 21. Systemtap • High level scripting language to work with the aforementioned tracing capabilities of Linux • Flexible as it allows for writing scripts that can trace specific lines within a file (debug symbols) • Next to tracing, it can also make changes to running programs when run in “guru mode” • Resulting scripts from systemtap are kernel modules that are loaded in to the kernel (kprobe and uprobes) • Adding a eBPF target is in the works as currently, systemtap may result in unremovable modules or sudden death of traced processes
  • 22. stp files • Example script oneliner: • stap -e ‘probe syscall.open { printf(“exec %s, file%s, execname(), filename) }’ • stap -L ‘syscall.open' • syscall.open: __nr:long name:string filename:string flags:long flags_str:string mode:long argstr:string • List user space functions in process “trace” • stap -L ‘process(“./trace").function("*")' • .call and .return probes for each function
  • 24. Tracing line numbers • What's the value of ret after line 35? • Could be done by tracing ret values, but that is not the purpose of this exercise • gcc -g -O0 • full debug info
  • 25. Tracing line number • .statement(“main@code/talk/trace.c:36”) { … }
  • 28. Downstack • All functions being called by a function
  • 31. Calling convention • AMD64 calling conventions • RDI, RSI, RDX, RCX, R8 and R9 • Go is based on PLAN9 which uses a different approach therefore tracing does not work as well as one would like it to be (yet) • This also goes for debuggers • Perhaps Go will start using the X86_64 ABI as it moves forward or all tools and debuggers will add specific PLAN9 support • https://go-review.googlesource.com/#/c/28832/ (ABI change?) • GO bindings to the BCC tool chain • Allows for creating eBPF tracing tools written in go • but still requires writing the actual trace logic in C
  • 32. Summary • Dynamic tracing is an invaluable tool for understanding code flow • To verify hypotheses around software bugs or understanding • Ability to make changes to code on the fly with out recompiling (guru mode) • Under constant development most noticeable the eBPF/BCC work