-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
124 lines (92 loc) · 5.86 KB
/
README
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
gdbHooks - A small package to show gdb hooks for breakpoint safe system time based service access
Overview:
This package contians code and examples for building a timer based process
with the capability to be run withing GDB and still maintain all its original
timing characteristics. It includes a simple module, `TimerWrapper.h/cc`, that
will encapsulate all access to the system get time functions and will adjust
the value returned for any time spent stopped at a GDB breakpoint. This module
should be built/linked with an application. All calls to get the system time
from the process must be done via these functions.
There is a demo program provided that can be run to show the functionality of
this package. This demo program has a simple infinite loop with a call to a
function, `foo`, that will print out the actual system time and the adusted
time, and then sleep for 1 second.
Building:
To build the demo program, from this directory run:
$ g++ -g TimerWrapper.cc gdbHooksDemo.cc -o gdbHooksDemo
Setup:
To setup for emacs use, copy the included `.emacs` file to your home directory and edit
the file per the instructions in the comments. Also, place the shell scripts `gdbCli`
and `gdbEmacs` and the `timerHooks` file in other locations as necessary and edit the
`gdbCli` and `gdbEmacs` files and change the location of the `timerHooks` file as
necessary. When using emacs for the graphical GDB front end, it is recommended to use
emacs23, the reasons are described below in the Emacs Mode section. If emacs23 is not
available on your host, it should be installed as follows, ex for Ubuntu:
$ sudo apt-get install emacs23
CLI Mode:
This section describes running the demo program in command line mode. There is
a simple shell script wrapper around the 'gdb' command line program.
Run the program from within gdb in CLI mode as follows:
$ gdbCli gdbHooksDemo
Once within the gdb prompt, set a breakpoint at the function 'foo' as follows:
(gdb) break foo
Once the breakpoint is set, you can just successively run continue as follows to see the
actual time, and the adjusted time based on the time spent at a breakpoint/stopped state
as shown below. As can be seen by comparing the actual and adjusted times, regardless of
how much time is spent at a breakpoint, the adjusted time will only reflect the actual
process run time.
(gdb) continue
Actual Elapsed Time: 133324184 usec, Adjusted Elapsed Time: 11112 usec
Actual Elapsed Time: 133324 msec, Adjusted Elapsed Time: 11 msec
Actual Elapsed Time: 133 sec, Adjusted Elapsed Time: 0 sec
Actual Time Of Day: 12-22-2019 13:22:29.428603, Adjusted Time Of Day: 12-22-2019 13:20:16.115524
(gdb) continue
Actual Elapsed Time: 135933179 usec, Adjusted Elapsed Time: 1022161 usec
Actual Elapsed Time: 135933 msec, Adjusted Elapsed Time: 1022 msec
Actual Elapsed Time: 135 sec, Adjusted Elapsed Time: 1 sec
Actual Time Of Day: 12-22-2019 13:22:32.037598, Adjusted Time Of Day: 12-22-2019 13:20:17.126578
(gdb) continue
Actual Elapsed Time: 141762466 usec, Adjusted Elapsed Time: 2032749 usec
Actual Elapsed Time: 141762 msec, Adjusted Elapsed Time: 2032 msec
Actual Elapsed Time: 141 sec, Adjusted Elapsed Time: 2 sec
Actual Time Of Day: 12-22-2019 13:22:37.866885, Adjusted Time Of Day: 12-22-2019 13:20:18.137166
(gdb) continue
Actual Elapsed Time: 202398215 usec, Adjusted Elapsed Time: 3046006 usec
Actual Elapsed Time: 202398 msec, Adjusted Elapsed Time: 3046 msec
Actual Elapsed Time: 202 sec, Adjusted Elapsed Time: 3 sec
Actual Time Of Day: 12-22-2019 13:23:38.502634, Adjusted Time Of Day: 12-22-2019 13:20:19.150423
(gdb) continue
Actual Elapsed Time: 226610267 usec, Adjusted Elapsed Time: 4057473 usec
Actual Elapsed Time: 226610 msec, Adjusted Elapsed Time: 4057 msec
Actual Elapsed Time: 226 sec, Adjusted Elapsed Time: 4 sec
Actual Time Of Day: 12-22-2019 13:24:02.714686, Adjusted Time Of Day: 12-22-2019 13:20:20.161889
(gdb) continue
Actual Elapsed Time: 369408255 usec, Adjusted Elapsed Time: 5068584 usec
Actual Elapsed Time: 369408 msec, Adjusted Elapsed Time: 5068 msec
Actual Elapsed Time: 369 sec, Adjusted Elapsed Time: 5 sec
Actual Time Of Day: 12-22-2019 13:26:25.512674, Adjusted Time Of Day: 12-22-2019 13:20:21.173001
Emacs Mode:
This section describes running programs via the Emacs/GUD GDB graphical front end.
This has been tested with the following versions of emacs and gdb:
GNU Emacs 24.3.1
GNU Emacs 23.4.1
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1
***It is recommended to use emacs23 for the emacs GUI front end. This version of emacs
does not need the -i=mi option and will use the native GDB console based commands for it's
GUI based control. This will allow all timer hooks to work correctly with the GUI based
program control. If `emacs23` is not available, the `gdbEmacs` shell script will detect
that and run the standard installed `emacs` instead.***
***IMPORTANT NOTE: When running with a non-emacs23 version of emacs or later, DO NOT use
any of the graphical buttons (i.e. `run`, `continue` etc) for program control and execution.
This is because with the latest Emacs/GUD/GDB intgegration, it uses the gud-mi based
interface for the graphical commands, so all of the gdb commands are preceeded with
the `-exec-` prefix, i.e. `-exec-continue` as opposed to just `continue` etc. I have
not found a way to add gdb callback hooks for any of the `-exec-` based command formats.
If anyone knows of a way to do this, I would greatly appreciate any info on this.
For an emacs version other that emacs23, all program control should be done via the gdb
command line prompt sub-window and enter the same commands as the above CLI based example.***
There is a simple shell script wrapper around the `gdb` command line program.
Run the program from within gdb with Emacs/GUD mode as the graphical front end as follows
and then control the program either from the GUI or the GDB command line sub-window based
on the emacs version described above.
$ gdbEmacs gdbHooksDemo