summaryrefslogtreecommitdiffstats
path: root/documentation/GDB commands
blob: 8411f194800b15e7012a6ef3d1976feaa09b0fb1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
###################################################################
######################                #############################
###			GDB COMMANDS				###
######################                #############################
###################################################################

QEMU CONFIGURATION

	qemu must be started with "-s" option
	(shorthand for "-gdb tcp::1234")

#
# GDB PART 
#

SYMBOL FILES
	add-symbol-file /path/to/Hello.debug 0x... -s .data 0x...


CONNECTION
	- source gdbscript 
		(if a gdbscript is created, which contains
		add-symbol-file commandos)

	- target remote localhost:1234

DISCONNECTION
	- detach
		break connection with target, target resumes execution
		GDB				Target
		(RSP Client)			(RSP Server)
				D
		O------------------------------>O
						O RSP exchange
		O<------------------------------O
				OK
	-disconnect
		Simply break connection. Target stays at the point where execution terminated previously
		Reconnection(target remote): resume debugging at the point where the previous connection was broken

BREAKPOINTS

	- b CoreHandleProtocol 	|| or OutputString
	- break *0x65fe447	|| set breakpoint at address
	- delete 2		|| delete breakpoint no 2
	- break sampleApp.c:nn=LineNumber


INFORMATION

	- info 		
		address SYM	|| Get address for symbol SYM
		symbol ADDR	|| Show symbol at specified address

		all-registers	|| all registers & their contents
		
		breakpoints
		
		files		|| get Entry point + sections
		files		|| Names of targets & files being debugged

		functions	|| all function names in Program
		functions UefiMain  || show where this function occurs

		line

		types [regex]	|| list all types or with regex

		args		|| Argument variables of current stack frame
		locals		|| local variables of current stack frame
		variables	|| all gloabl & static variables


CONTROL FLOW

	- c			|| continue
	- next			|| move only one step forward
	- bt			|| print back_trace of all stack frames
	- stop			|| stop program until it reaches a different source line

FILES (perhaps not applicable when debugging with QEMU)

	- file MemtestEfi.efi	|| load file   ...no debugging symbols found...done
	- file			|| unload files

LIST

	- list			|| list specified function or line

gdb --tui
	- layout asm
	- layout reg
	- layout src

	- tui enable
	- tui disable

	- next

	- ctrl+x o		|| change active window

	- ctrl+x 1		|| use TUI layout with one window
	- ctrl+x 2		|| use TUI layout with two windows

	- PgUp			|| scroll the active window one page up
	- PgDn			|| scroll the active window one page down

	- Up			|| scroll the active window one line up
	- Down			|| scroll the active window one lin down
	- Right
	- Left

	- C+L			|| refresh the screen

VARIABLES
	info locals
	info variables
	info args

	|| Set is the same as print except that the expression's value is not printed
	|| and is not put in the value history.
	||  if your program has a variable width, you get an error if you try to set
	|| a new value with just ‘set width=13’, because GDB has the command set width
	|| To avoid to set silently general variables to invalid values, ALWAYS use
	|| set var x=4
	print x=4
	set x=4 or set variable x=4
	whatis x -> type = double

DISSASEMBLE BINARIES
	gdb -batch -ex 'file /bin/ls' -ex 'disassemble main'
	Also, -ex 'set disassembly-flavor intel' before other -exs will result in Intel assembly syntax

	gcc -O0 -ggdb3 -std=c99 -Wall -Wextra -pedantic -o main.out main.c
	gdb -batch -ex "disassemble/rs myfunc" main.out