debugging under linux

19
03/25/22 S. Ponce / EP-LBC 1 Debugging Under Linux Sebastien Ponce Sebastien Ponce Friday, 8 March 2002 Friday, 8 March 2002

Upload: gareth-giles

Post on 31-Dec-2015

28 views

Category:

Documents


0 download

DESCRIPTION

Debugging Under Linux. Sebastien Ponce Friday, 8 March 2002. Overview. When to use a debugger ? Available debuggers Very short introduction to gvd (GNU Visual Debugger) Some hints on debugging Gaudi Jobs Demo. When to Use a Debugger ?. If you compiled in debug mode : - PowerPoint PPT Presentation

TRANSCRIPT

04/19/23 S. Ponce / EP-LBC 1

Debugging Under Linux

Sebastien PonceSebastien Ponce

Friday, 8 March 2002Friday, 8 March 2002

08/03/2002 S. Ponce / EP-LBC 2

OverviewOverview

When to use a debugger ?When to use a debugger ? Available debuggersAvailable debuggers Very short introduction to gvdVery short introduction to gvd

(GNU Visual Debugger) (GNU Visual Debugger) Some hints on debugging Gaudi JobsSome hints on debugging Gaudi Jobs DemoDemo

08/03/2002 S. Ponce / EP-LBC 3

When to Use a Debugger ?When to Use a Debugger ?

If you compiled in debug mode :If you compiled in debug mode :• When you want to trace an application When you want to trace an application

execution (breakpoints, step in, ...)execution (breakpoints, step in, ...)• When you want to know where the When you want to know where the

execution crashes (segmentation fault is execution crashes (segmentation fault is handled)handled)

If you compiled in optimize mode :If you compiled in optimize mode :• You can still know which functions were You can still know which functions were

called and which one failedcalled and which one failed

08/03/2002 S. Ponce / EP-LBC 4

What to Do With a Core ?What to Do With a Core ?

You can still debug a program after a You can still debug a program after a segmentation fault if you have a core filesegmentation fault if you have a core file

You can learn aboutYou can learn about• Where it failedWhere it failed• What were the values of variables at this timeWhat were the values of variables at this time• What was the call stack at this timeWhat was the call stack at this time

08/03/2002 S. Ponce / EP-LBC 5

Available DebuggersAvailable Debuggers

GDBGDB Default linux debugger Powerfull & stable Installed on lxplus BUT for experts only

DDDDDD Based on gdb Installed on lxplus Allow Visual debugging BUT not stable

GVDGVD Based on gdb Installed in LHCb Allow visual debug Stable Can be found for free at

http://libre.act-europe.fr/gvd/ Very easy to install locally

PREFERED CHOICEPREFERED CHOICE

08/03/2002 S. Ponce / EP-LBC 6

Launching gvdLaunching gvd

Launching gvd :Launching gvd :source setup.csh

gvd <executable> Inside gvd :Inside gvd :

[set breaking points]

run <options>

In case of core dump :In case of core dump :source setup.csh

gvd <executable> Inside gvd :Inside gvd :

FileOpen Core Dump <core>

08/03/2002 S. Ponce / EP-LBC 7

gvd Basicsgvd Basics

Menu bar

Tool bar

Call stack

Source files

Gdb window

Data display

Current Line

Source code

08/03/2002 S. Ponce / EP-LBC 8

Some Hints for Gaudi JobsSome Hints for Gaudi Jobs

Gaudi is using shared librariesGaudi is using shared libraries The source files of these do no appear in gvd The source files of these do no appear in gvd

before the libraries are loadedbefore the libraries are loaded The trick is :The trick is :

gvd <executable>gvd <executable>

break mainbreak main

run <options>run <options>

next next here we loaded the ApplicationMgr here we loaded the ApplicationMgr

break ApplicationMgr::configurebreak ApplicationMgr::configure

contcont

finish finish now every dll is loaded now every dll is loaded

08/03/2002 S. Ponce / EP-LBC 9

Demo (1)Demo (1)

Launch :Launch :tar xvf demo.tar

cd demo

make

./hello

Segmentation Fault

gvd hello

08/03/2002 S. Ponce / EP-LBC 10

Demo (2)Demo (2)

gdb windows :gdb windows :(gdb) run

Starting Program: /home/sponce/demo/hello

Program received signal SIGSEGV, Segmentation fault

0x400e1630 in strcmp() from /lib/libc.so.6

(gdb) In menuIn menu

Data Call Stack In Tool BarIn Tool Bar

Up

08/03/2002 S. Ponce / EP-LBC 11

Demo (3)Demo (3)

argument line was 0x0

strcmp called from Hello::print

Click "Up" once more to see where the line argument was set to 0x0

08/03/2002 S. Ponce / EP-LBC 12

Demo (4)Demo (4)

Hello::print called from Hello::displayMessage with no argument

when print argument is missing, the default is a 0 pointer and fails.

The default has to be changed to empty string

08/03/2002 S. Ponce / EP-LBC 13

Demo (5)Demo (5)

Edition of Hello.h :Edition of Hello.h :static void print (char* line = 0);

becomes :

static void print (char* line = "");

In a shell :In a shell :make

./hello

Segmentation Fault

gvd hello In gvdIn gvd

run

There is another bug !There is another bug !

08/03/2002 S. Ponce / EP-LBC 14

Demo (6)Demo (6)

In gvd :In gvd :display Call Stack

“Up" The bug is still in strcmp, line is still 0x0The bug is still in strcmp, line is still 0x0 In gvd :In gvd :

“Up"

DataDisplay Any Expression ”this”

Then click on the fields of this to see the internal values

08/03/2002 S. Ponce / EP-LBC 15

Demo (7)Demo (7)

thism_message is 0x0

We'll try to place a breakpoint where the initialization of m_message is done, i.e. In the constructor of Hello.

08/03/2002 S. Ponce / EP-LBC 16

Demo (8)Demo (8)

In gvd :In gvd :Click on the blue point in front of line 4 of Hello.cpp to set

a break point there

Click run

Say you want to start from beginning gvd stops when the program reaches line 4gvd stops when the program reaches line 4

obviously the constructor was called with message = 0x0

Click "Up" to see where we came from

08/03/2002 S. Ponce / EP-LBC 17

Demo (9)Demo (9)

We were suppose to go through line 20, not 22 since we gave no argument

This should have been 1 == argc !!!

Fix and run. All Right !

08/03/2002 S. Ponce / EP-LBC 18

Demo (10)Demo (10)

This is an example of what you get in case of non debug mode

You still have the call stack but not the values of the arguments

08/03/2002 S. Ponce / EP-LBC 19

Demo (11)Demo (11)

This show you what you get from a core : gvd hello File->Open Core

It’s equivalent to run the program inside the debugger