SlideShare uma empresa Scribd logo
1 de 16
Advanced Debugging with gdbDavid KhosidSept 21, 2009david.kh@gmail.com
Agenda Techniques for debugging big, modern software: STL containers and algorithms, Boost Ex: how to see containers Signals Multi-threaded (ex.: how to follow a thread?) Repetitive tasks on the almost unchanging code base Remote debugging Examples 2
GDB was first written by Richard Stallman  in 1986 as part of his GNU system Richard Stallman, “Debugging with gdb” www.gnu.org/software/gdb/documentation Help: 	$gdb –h 		(gdb) h 		(gdb) aproposCommand names may be truncated if the abbreviation is unambiguous. TAB completion.  Command Cheat Sheetwww.yolinux.com/TUTORIALS/GDB-Commands.html Last GDB version is 6.8, new 7.0 soon: 2009-09-23 3 Sources of information
Item #1: C++ and STL - Containers How to see container’s content? Commands file, ex. .gdbinithttp://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txtLimitations: a little libstdc++ compiled in debug modeLimitations: - different product , not for QA, not for client, not in performance tuning stage- performance  4
Item #1: C++ and STL - Containers How to see container’s content? Auxiliary functionstypedef map<string, float> MapStringFloat;void mapPrint(const MapStringFloat& m){       for(MapStringFloat::const_iterator pos = m.begin(); pos != m.end(); ++pos){                     cout << pos->first << " : " << pos->second << ""; }Limitations: - you can’t do that without a process to debug (investigating core files)- optimization of unused functions. Solution: ‘volatile’ Pretty-printing of STL containers in future versions of GDB 5
Item #2: Extending GDB – User-defined commands (gdb) show user commandname Example: (gdb)define adder	print $arg0 + $arg1 + $arg2 end(gdb) adder 1 2 3  6
Item #3: Automating repetitive tasks  What GDB Does During Startup1. Executes all commands from system init file 2. Executes all the commands from ~/.gdbinit3. Process command line options and operands 4. Executes all the commands from ./.gdbinit5. reads command files specified by the `-x' option 6. … 7
Automating tasks - history, recording continueWhat GDB Does During Startup… 6. Reads the command history recorded in the history file.  (gdb) set history filename fname(gdb) set history save on/off (gdb) show history (gdb) show commands 8
Item #4: Signals ‘i handle’ or ‘i signals’Print a table of all the signals and how gdb has been told to handle each one. handle signal [keywords...]keywords: nostop|stop,  print|noprint and pass|nopassEx: handle SIG35 nostop print pass 	handle SIG36 stop (implies the ‘print’ as well)	handle SIG37 nostop print nopass	handle SIG38 nostopnoprintnopass 9
Item #5: Multi-threads Use case: debugging specific thread, while controlling behavior of others. facilities for debugging multi-thread programs:• automatic notification of new threads• ‘thread threadno’, to switch among threads• ‘info threads’, to inquire about existing threads• thread-specific breakpoints• set mode for locking scheduler during execution 	(gdb) set scheduler-locking step/on/offothers: Interrupted System Calls Example:(gdb) i threads(gbd) b foo.cpp:13 thread 28 if x > lim 10
Item #5: Remote debugging Use case: - GDB runs on one machine (host) and the program  being debugged (exe.verXYZ.stripped ) runs on another (target). - GDB communicates via Serial or TCP/IP.- Host and target: exactly match between the executables and libraries, with one exception: stripped on the target.- Complication: compiling on one machine (CC view), keeping code in different place (ex. /your/path/verXYZ) Solution: - Connect gdb to source in the given place:(gdb) set substitute-path /usr/src /mnt/cross (gdb) dir /your/path/verXYZ 11
Remote debugging - example Using gdbserver through TCP connection: remote (10.10.0.225)>  gdbserver :9999 program_strippedor remote> ./gdbserver :9999 –attach <pid> host> gdb programhost>(gdb) handle SIGTRAP nostopnoprint pass			 to avoid pausing when launching the threadshost> (gdb) target remote 10.10.0.225:9999 TARGET (Android Dev phone)	 HOST (Fedora Linux) 12
Item #6: Back to the past  Convenience variables are used to store values that you may want to refer later. Any string preceded by $ is regarded as a convenience variable. Ex.:set $table = *table_ptr 	(gdb) show conv Checkpoint - a snapshot of a program’s state(gdb) checkpoint(gdb) i checkpoint(gdb) restartcheckpoint-id Value history- values printed by the print command. 13
Small Items: #7, #8  #7. 	How to see macros? 	$ g++ -gdwarf-2 -g3 a.cpp -o prog #8. 	64 bit .vs. 32bit  -m32 flag On 64-bit machine, install another 32-bit version of GDB 	$ ls -l `which gdb32` 	/usr/bin/gdb32 ->  ‘/your/install/path’ 14
Lightweight how-to's How to remove a symbol table from a file?A: 	strip How to supply arguments to your program in GDB?A1: With --args option 	#sudo gdb -silent --args /bin/ping google.comA2: As arguments to run: (gdb) runarg1 arg2run without arguments uses the same arguments used by the previous run. A3: With set args  command: 		(gdb) set args arg1 arg2(gdb) show args set args without arguments – removes all arguments.  How to know where you are (file, next execution line)?A:  	(gdb) f 15
Lightweight how-to's - continue How to find out the crash file executable? A1: #file core.1234A2: #gdb core.1234A3: use /proc/sys/kernel/core_pattern#echo "core_%e.%p" > /proc/sys/kernel/core_pattern 	if the program foo dumps its core, 	the core_foo.1234 will be created. How to find out why your program stopped?A: (gdb) iprog Which command(s) can be used to exit from loops?A:(gdb)until lineNo ‘print’, ‘info’, ‘show’- what is a difference?‘print’ – print value of expression‘info’ – showing things about the program being debugged‘show’ – showing things about the debugger 16

Mais conteúdo relacionado

Mais procurados

The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelDivye Kapoor
 
Xdp and ebpf_maps
Xdp and ebpf_mapsXdp and ebpf_maps
Xdp and ebpf_mapslcplcp1
 
Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)Andriy Berestovskyy
 
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchJagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchlinuxlab_conf
 
Linux Kernel - Virtual File System
Linux Kernel - Virtual File SystemLinux Kernel - Virtual File System
Linux Kernel - Virtual File SystemAdrian Huang
 
HKG18-203 - Overview of Linaro DRM
HKG18-203 - Overview of Linaro DRMHKG18-203 - Overview of Linaro DRM
HKG18-203 - Overview of Linaro DRMLinaro
 
Intel DPDK Step by Step instructions
Intel DPDK Step by Step instructionsIntel DPDK Step by Step instructions
Intel DPDK Step by Step instructionsHisaki Ohara
 
Page cache in Linux kernel
Page cache in Linux kernelPage cache in Linux kernel
Page cache in Linux kernelAdrian Huang
 
Understanding of linux kernel memory model
Understanding of linux kernel memory modelUnderstanding of linux kernel memory model
Understanding of linux kernel memory modelSeongJae Park
 
Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequenceHoucheng Lin
 
Qemu device prototyping
Qemu device prototypingQemu device prototyping
Qemu device prototypingYan Vugenfirer
 
Linux Kernel and Driver Development Training
Linux Kernel and Driver Development TrainingLinux Kernel and Driver Development Training
Linux Kernel and Driver Development TrainingStephan Cadene
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
Part 02 Linux Kernel Module Programming
Part 02 Linux Kernel Module ProgrammingPart 02 Linux Kernel Module Programming
Part 02 Linux Kernel Module ProgrammingTushar B Kute
 
HKG15-107: ACPI Power Management on ARM64 Servers (v2)
HKG15-107: ACPI Power Management on ARM64 Servers (v2)HKG15-107: ACPI Power Management on ARM64 Servers (v2)
HKG15-107: ACPI Power Management on ARM64 Servers (v2)Linaro
 

Mais procurados (20)

The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
 
Xdp and ebpf_maps
Xdp and ebpf_mapsXdp and ebpf_maps
Xdp and ebpf_maps
 
Userspace networking
Userspace networkingUserspace networking
Userspace networking
 
Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)
 
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchJagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratch
 
eBPF/XDP
eBPF/XDP eBPF/XDP
eBPF/XDP
 
Linux Kernel - Virtual File System
Linux Kernel - Virtual File SystemLinux Kernel - Virtual File System
Linux Kernel - Virtual File System
 
Linux Network Stack
Linux Network StackLinux Network Stack
Linux Network Stack
 
HKG18-203 - Overview of Linaro DRM
HKG18-203 - Overview of Linaro DRMHKG18-203 - Overview of Linaro DRM
HKG18-203 - Overview of Linaro DRM
 
Intel DPDK Step by Step instructions
Intel DPDK Step by Step instructionsIntel DPDK Step by Step instructions
Intel DPDK Step by Step instructions
 
Page cache in Linux kernel
Page cache in Linux kernelPage cache in Linux kernel
Page cache in Linux kernel
 
Understanding of linux kernel memory model
Understanding of linux kernel memory modelUnderstanding of linux kernel memory model
Understanding of linux kernel memory model
 
Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequence
 
Qemu device prototyping
Qemu device prototypingQemu device prototyping
Qemu device prototyping
 
Linux Kernel and Driver Development Training
Linux Kernel and Driver Development TrainingLinux Kernel and Driver Development Training
Linux Kernel and Driver Development Training
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
Part 02 Linux Kernel Module Programming
Part 02 Linux Kernel Module ProgrammingPart 02 Linux Kernel Module Programming
Part 02 Linux Kernel Module Programming
 
HKG15-107: ACPI Power Management on ARM64 Servers (v2)
HKG15-107: ACPI Power Management on ARM64 Servers (v2)HKG15-107: ACPI Power Management on ARM64 Servers (v2)
HKG15-107: ACPI Power Management on ARM64 Servers (v2)
 
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernelEmbedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
 
TMUX Rocks!
TMUX Rocks!TMUX Rocks!
TMUX Rocks!
 

Destaque

Q2.12: Debugging with GDB
Q2.12: Debugging with GDBQ2.12: Debugging with GDB
Q2.12: Debugging with GDBLinaro
 
Crash Dump Analysis 101
Crash Dump Analysis 101Crash Dump Analysis 101
Crash Dump Analysis 101John Howard
 
From printk to QEMU: Xen/Linux Kernel debugging
From printk to QEMU: Xen/Linux Kernel debuggingFrom printk to QEMU: Xen/Linux Kernel debugging
From printk to QEMU: Xen/Linux Kernel debuggingThe Linux Foundation
 
Introduction to gdb
Introduction to gdbIntroduction to gdb
Introduction to gdbOwen Hsu
 
Advanced Tracing features using GDB and LTTng
Advanced Tracing features using GDB and LTTngAdvanced Tracing features using GDB and LTTng
Advanced Tracing features using GDB and LTTngmarckhouzam
 
Debugger Principle Overview & GDB Tricks
Debugger Principle Overview & GDB TricksDebugger Principle Overview & GDB Tricks
Debugger Principle Overview & GDB Tricksdutor
 
Reverse, Multi-Process and Non-Stop Debugging come to the CDT
Reverse, Multi-Process and Non-Stop Debugging come to the CDTReverse, Multi-Process and Non-Stop Debugging come to the CDT
Reverse, Multi-Process and Non-Stop Debugging come to the CDTmarckhouzam
 
Real time debugging: using non-intrusive tracepoints to debug live systems
Real time debugging: using non-intrusive tracepoints to debug live systemsReal time debugging: using non-intrusive tracepoints to debug live systems
Real time debugging: using non-intrusive tracepoints to debug live systemsmarckhouzam
 
Working Remotely (via SSH) Rocks!
Working Remotely (via SSH) Rocks!Working Remotely (via SSH) Rocks!
Working Remotely (via SSH) Rocks!Kent Chen
 
LAS16-403: GDB Linux Kernel Awareness
LAS16-403: GDB Linux Kernel AwarenessLAS16-403: GDB Linux Kernel Awareness
LAS16-403: GDB Linux Kernel AwarenessLinaro
 
Linux booting process!!
Linux booting process!!Linux booting process!!
Linux booting process!!sourav verma
 
Linux booting Process
Linux booting ProcessLinux booting Process
Linux booting ProcessGaurav Sharma
 
DPDK Summit - 08 Sept 2014 - Futurewei - Jun Xu - Revisit the IP Stack in Lin...
DPDK Summit - 08 Sept 2014 - Futurewei - Jun Xu - Revisit the IP Stack in Lin...DPDK Summit - 08 Sept 2014 - Futurewei - Jun Xu - Revisit the IP Stack in Lin...
DPDK Summit - 08 Sept 2014 - Futurewei - Jun Xu - Revisit the IP Stack in Lin...Jim St. Leger
 
Linux installation and booting process
Linux installation and booting processLinux installation and booting process
Linux installation and booting processSiddharth Jain
 

Destaque (20)

GDB Rocks!
GDB Rocks!GDB Rocks!
GDB Rocks!
 
Q2.12: Debugging with GDB
Q2.12: Debugging with GDBQ2.12: Debugging with GDB
Q2.12: Debugging with GDB
 
Crash Dump Analysis 101
Crash Dump Analysis 101Crash Dump Analysis 101
Crash Dump Analysis 101
 
Gdb remote debugger
Gdb remote debuggerGdb remote debugger
Gdb remote debugger
 
From printk to QEMU: Xen/Linux Kernel debugging
From printk to QEMU: Xen/Linux Kernel debuggingFrom printk to QEMU: Xen/Linux Kernel debugging
From printk to QEMU: Xen/Linux Kernel debugging
 
Introduction to gdb
Introduction to gdbIntroduction to gdb
Introduction to gdb
 
Advanced Tracing features using GDB and LTTng
Advanced Tracing features using GDB and LTTngAdvanced Tracing features using GDB and LTTng
Advanced Tracing features using GDB and LTTng
 
Debugger Principle Overview & GDB Tricks
Debugger Principle Overview & GDB TricksDebugger Principle Overview & GDB Tricks
Debugger Principle Overview & GDB Tricks
 
Aag c45 697761
Aag c45 697761Aag c45 697761
Aag c45 697761
 
Reverse, Multi-Process and Non-Stop Debugging come to the CDT
Reverse, Multi-Process and Non-Stop Debugging come to the CDTReverse, Multi-Process and Non-Stop Debugging come to the CDT
Reverse, Multi-Process and Non-Stop Debugging come to the CDT
 
Real time debugging: using non-intrusive tracepoints to debug live systems
Real time debugging: using non-intrusive tracepoints to debug live systemsReal time debugging: using non-intrusive tracepoints to debug live systems
Real time debugging: using non-intrusive tracepoints to debug live systems
 
Working Remotely (via SSH) Rocks!
Working Remotely (via SSH) Rocks!Working Remotely (via SSH) Rocks!
Working Remotely (via SSH) Rocks!
 
Udev
UdevUdev
Udev
 
LAS16-403: GDB Linux Kernel Awareness
LAS16-403: GDB Linux Kernel AwarenessLAS16-403: GDB Linux Kernel Awareness
LAS16-403: GDB Linux Kernel Awareness
 
Linux booting process!!
Linux booting process!!Linux booting process!!
Linux booting process!!
 
Vim Rocks!
Vim Rocks!Vim Rocks!
Vim Rocks!
 
Linux booting Process
Linux booting ProcessLinux booting Process
Linux booting Process
 
DPDK Summit - 08 Sept 2014 - Futurewei - Jun Xu - Revisit the IP Stack in Lin...
DPDK Summit - 08 Sept 2014 - Futurewei - Jun Xu - Revisit the IP Stack in Lin...DPDK Summit - 08 Sept 2014 - Futurewei - Jun Xu - Revisit the IP Stack in Lin...
DPDK Summit - 08 Sept 2014 - Futurewei - Jun Xu - Revisit the IP Stack in Lin...
 
Linux installation and booting process
Linux installation and booting processLinux installation and booting process
Linux installation and booting process
 
kubernetes, pourquoi et comment
kubernetes, pourquoi et commentkubernetes, pourquoi et comment
kubernetes, pourquoi et comment
 

Semelhante a Advanced Debugging with GDB

ELC-E Linux Awareness
ELC-E Linux AwarenessELC-E Linux Awareness
ELC-E Linux AwarenessPeter Griffin
 
gdb-tutorial.pdf
gdb-tutorial.pdfgdb-tutorial.pdf
gdb-tutorial.pdfligi14
 
Debugging Modern C++ Application with Gdb
Debugging Modern C++ Application with GdbDebugging Modern C++ Application with Gdb
Debugging Modern C++ Application with GdbSenthilKumar Selvaraj
 
LAS16-403 - GDB Linux Kernel Awareness
LAS16-403 - GDB Linux Kernel Awareness LAS16-403 - GDB Linux Kernel Awareness
LAS16-403 - GDB Linux Kernel Awareness Peter Griffin
 
Gdb tutorial-handout
Gdb tutorial-handoutGdb tutorial-handout
Gdb tutorial-handoutSuraj Kumar
 
Anatomy of ROCgdb presentation at gcc cauldron 2022
Anatomy of ROCgdb presentation at gcc cauldron 2022Anatomy of ROCgdb presentation at gcc cauldron 2022
Anatomy of ROCgdb presentation at gcc cauldron 2022ssuser866937
 
Debugging of (C)Python applications
Debugging of (C)Python applicationsDebugging of (C)Python applications
Debugging of (C)Python applicationsRoman Podoliaka
 
Debugging Python with gdb
Debugging Python with gdbDebugging Python with gdb
Debugging Python with gdbRoman Podoliaka
 
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...Mydbops
 
Debugging Hung Python Processes With GDB
Debugging Hung Python Processes With GDBDebugging Hung Python Processes With GDB
Debugging Hung Python Processes With GDBbmbouter
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debugginglibfetion
 
Roll your own toy unix clone os
Roll your own toy unix clone osRoll your own toy unix clone os
Roll your own toy unix clone oseramax
 

Semelhante a Advanced Debugging with GDB (20)

ELC-E Linux Awareness
ELC-E Linux AwarenessELC-E Linux Awareness
ELC-E Linux Awareness
 
gdb-tutorial.pdf
gdb-tutorial.pdfgdb-tutorial.pdf
gdb-tutorial.pdf
 
lab1-ppt.pdf
lab1-ppt.pdflab1-ppt.pdf
lab1-ppt.pdf
 
Debugging Modern C++ Application with Gdb
Debugging Modern C++ Application with GdbDebugging Modern C++ Application with Gdb
Debugging Modern C++ Application with Gdb
 
GNU Debugger
GNU DebuggerGNU Debugger
GNU Debugger
 
Gnu debugger
Gnu debuggerGnu debugger
Gnu debugger
 
LAS16-403 - GDB Linux Kernel Awareness
LAS16-403 - GDB Linux Kernel Awareness LAS16-403 - GDB Linux Kernel Awareness
LAS16-403 - GDB Linux Kernel Awareness
 
Debuging like a pro
Debuging like a proDebuging like a pro
Debuging like a pro
 
Usage of GDB
Usage of GDBUsage of GDB
Usage of GDB
 
Gdb tutorial-handout
Gdb tutorial-handoutGdb tutorial-handout
Gdb tutorial-handout
 
Anatomy of ROCgdb presentation at gcc cauldron 2022
Anatomy of ROCgdb presentation at gcc cauldron 2022Anatomy of ROCgdb presentation at gcc cauldron 2022
Anatomy of ROCgdb presentation at gcc cauldron 2022
 
Debugging of (C)Python applications
Debugging of (C)Python applicationsDebugging of (C)Python applications
Debugging of (C)Python applications
 
Debugging Python with gdb
Debugging Python with gdbDebugging Python with gdb
Debugging Python with gdb
 
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
 
Debugging Hung Python Processes With GDB
Debugging Hung Python Processes With GDBDebugging Hung Python Processes With GDB
Debugging Hung Python Processes With GDB
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debugging
 
Wavedigitech gdb
Wavedigitech gdbWavedigitech gdb
Wavedigitech gdb
 
Roll your own toy unix clone os
Roll your own toy unix clone osRoll your own toy unix clone os
Roll your own toy unix clone os
 
Linux Kernel Debugging
Linux Kernel DebuggingLinux Kernel Debugging
Linux Kernel Debugging
 
Debug generic process
Debug generic processDebug generic process
Debug generic process
 

Último

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 

Último (20)

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 

Advanced Debugging with GDB

  • 1. Advanced Debugging with gdbDavid KhosidSept 21, 2009david.kh@gmail.com
  • 2. Agenda Techniques for debugging big, modern software: STL containers and algorithms, Boost Ex: how to see containers Signals Multi-threaded (ex.: how to follow a thread?) Repetitive tasks on the almost unchanging code base Remote debugging Examples 2
  • 3. GDB was first written by Richard Stallman in 1986 as part of his GNU system Richard Stallman, “Debugging with gdb” www.gnu.org/software/gdb/documentation Help: $gdb –h (gdb) h (gdb) aproposCommand names may be truncated if the abbreviation is unambiguous. TAB completion. Command Cheat Sheetwww.yolinux.com/TUTORIALS/GDB-Commands.html Last GDB version is 6.8, new 7.0 soon: 2009-09-23 3 Sources of information
  • 4. Item #1: C++ and STL - Containers How to see container’s content? Commands file, ex. .gdbinithttp://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txtLimitations: a little libstdc++ compiled in debug modeLimitations: - different product , not for QA, not for client, not in performance tuning stage- performance 4
  • 5. Item #1: C++ and STL - Containers How to see container’s content? Auxiliary functionstypedef map<string, float> MapStringFloat;void mapPrint(const MapStringFloat& m){ for(MapStringFloat::const_iterator pos = m.begin(); pos != m.end(); ++pos){ cout << pos->first << " : " << pos->second << ""; }Limitations: - you can’t do that without a process to debug (investigating core files)- optimization of unused functions. Solution: ‘volatile’ Pretty-printing of STL containers in future versions of GDB 5
  • 6. Item #2: Extending GDB – User-defined commands (gdb) show user commandname Example: (gdb)define adder print $arg0 + $arg1 + $arg2 end(gdb) adder 1 2 3 6
  • 7. Item #3: Automating repetitive tasks What GDB Does During Startup1. Executes all commands from system init file 2. Executes all the commands from ~/.gdbinit3. Process command line options and operands 4. Executes all the commands from ./.gdbinit5. reads command files specified by the `-x' option 6. … 7
  • 8. Automating tasks - history, recording continueWhat GDB Does During Startup… 6. Reads the command history recorded in the history file. (gdb) set history filename fname(gdb) set history save on/off (gdb) show history (gdb) show commands 8
  • 9. Item #4: Signals ‘i handle’ or ‘i signals’Print a table of all the signals and how gdb has been told to handle each one. handle signal [keywords...]keywords: nostop|stop, print|noprint and pass|nopassEx: handle SIG35 nostop print pass handle SIG36 stop (implies the ‘print’ as well) handle SIG37 nostop print nopass handle SIG38 nostopnoprintnopass 9
  • 10. Item #5: Multi-threads Use case: debugging specific thread, while controlling behavior of others. facilities for debugging multi-thread programs:• automatic notification of new threads• ‘thread threadno’, to switch among threads• ‘info threads’, to inquire about existing threads• thread-specific breakpoints• set mode for locking scheduler during execution (gdb) set scheduler-locking step/on/offothers: Interrupted System Calls Example:(gdb) i threads(gbd) b foo.cpp:13 thread 28 if x > lim 10
  • 11. Item #5: Remote debugging Use case: - GDB runs on one machine (host) and the program being debugged (exe.verXYZ.stripped ) runs on another (target). - GDB communicates via Serial or TCP/IP.- Host and target: exactly match between the executables and libraries, with one exception: stripped on the target.- Complication: compiling on one machine (CC view), keeping code in different place (ex. /your/path/verXYZ) Solution: - Connect gdb to source in the given place:(gdb) set substitute-path /usr/src /mnt/cross (gdb) dir /your/path/verXYZ 11
  • 12. Remote debugging - example Using gdbserver through TCP connection: remote (10.10.0.225)> gdbserver :9999 program_strippedor remote> ./gdbserver :9999 –attach <pid> host> gdb programhost>(gdb) handle SIGTRAP nostopnoprint pass to avoid pausing when launching the threadshost> (gdb) target remote 10.10.0.225:9999 TARGET (Android Dev phone) HOST (Fedora Linux) 12
  • 13. Item #6: Back to the past Convenience variables are used to store values that you may want to refer later. Any string preceded by $ is regarded as a convenience variable. Ex.:set $table = *table_ptr (gdb) show conv Checkpoint - a snapshot of a program’s state(gdb) checkpoint(gdb) i checkpoint(gdb) restartcheckpoint-id Value history- values printed by the print command. 13
  • 14. Small Items: #7, #8 #7. How to see macros? $ g++ -gdwarf-2 -g3 a.cpp -o prog #8. 64 bit .vs. 32bit -m32 flag On 64-bit machine, install another 32-bit version of GDB $ ls -l `which gdb32` /usr/bin/gdb32 -> ‘/your/install/path’ 14
  • 15. Lightweight how-to's How to remove a symbol table from a file?A: strip How to supply arguments to your program in GDB?A1: With --args option #sudo gdb -silent --args /bin/ping google.comA2: As arguments to run: (gdb) runarg1 arg2run without arguments uses the same arguments used by the previous run. A3: With set args command: (gdb) set args arg1 arg2(gdb) show args set args without arguments – removes all arguments. How to know where you are (file, next execution line)?A: (gdb) f 15
  • 16. Lightweight how-to's - continue How to find out the crash file executable? A1: #file core.1234A2: #gdb core.1234A3: use /proc/sys/kernel/core_pattern#echo "core_%e.%p" > /proc/sys/kernel/core_pattern if the program foo dumps its core, the core_foo.1234 will be created. How to find out why your program stopped?A: (gdb) iprog Which command(s) can be used to exit from loops?A:(gdb)until lineNo ‘print’, ‘info’, ‘show’- what is a difference?‘print’ – print value of expression‘info’ – showing things about the program being debugged‘show’ – showing things about the debugger 16
  • 17. Problem Determination Tools for Linux -Wall  Code review Program’s traces, syslog, profilers Static Source Code Analysis: scan.coverity.com – free for FOSS Flexelint Dynamic analysis: Valgrind, strace, /proc filesystem, lsof, ldd, nm, objdump, wireshark 17
  • 18. Summary Start from thinking of Use Case, then look in the manual, use ‘apropos’ and ‘help’ Productivity:Stepping through a program is less productive than thinking harder and adding output statements and self-checking code at critical places. When to use GDB? - core file, - when a problem can be reproduced, repeating errors - self-educating When not?Other tools, traces Questions? 18