File: TODO

package info (click to toggle)
ggcov 0.9-14
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 4,400 kB
  • ctags: 4,055
  • sloc: cpp: 17,077; sh: 12,380; ansic: 7,743; php: 1,644; perl: 1,509; makefile: 259; yacc: 23
file content (365 lines) | stat: -rw-r--r-- 14,700 bytes parent folder | download | duplicates (3)
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365

--- OPEN ---

x  Calculate the CCN complexity metric as part of cov_stats_t
   and display it in the Summary window, Functions window,
   Files window.

x  Convert to using stdtypes.h and uint64_t.  Also stdbool.h and bool.

x  For the Blocks column in the Source window, colourise each block
   number according to its coverage status, not the whole line.

x  test solving a function in which a signal was delivered which
   terminated the process.
x  don't pop up a file selector when we used default args to find
   files just fine thanks
x  version control integration: for the Source window, do a git
   blame and have columns to show the date/age/author name/author
   email/commit name/commit id of each line.
x  version control integration: have a Commits window and show
   the most recent N commits with incremental coverage
   information, as per git-history-coverage but more graphical.
x  the --help messages mention .da etc files - should mention .gcda

x  Test both cases in test030
   tggcov bar.c bar.y
   tggcov bar.y bar.c

x  Need a decent string array class.

x  Reimplement file_normalise and file_make_absolute using
   a string array class.  Possibly wrap those up in a pathname
   class.

x  Make the --disable-crash-dialog commandline option work

x  Fix assert failures or otherwise in Call Butterfly and
   Call Graph windows when test014's bar.c is loaded without
   foo.c.

x  find out how to get ggcov to be a std GNOME prog.

x  File->Open dialog needs to allow user to select a directory
   recursively like the --recursive commandline option.

x  Need a menu command to spawn a new ggcov, and/or one to forget
   all data.

x  New gcc 3.3 code is much smarter (or at least more complex)
   about calculating a "line coverage" number for lines which
   have certain configurations of multiple blocks, e.g. a
   loop entirely contained on a line.  Gcov uses some graph
   theory to subtract the intra-line counts, but ggcov just
   stupidly takes the maximum of all the block counts.  The
   textbook example is
   
   for (i=0 ; i<3 ; i++) { j++ }

   Gcov reports that this line is executed once, ggcov that it's
   executed 4 times, once for each time through the loop and once
   for the final terminating test.  The problem is that the maximum
   technique is so cheap that ggcov just does it on the fly;
   the graph technique is more computationally expensive and
   will require a calculate-and-store approach, which means a
   data structure re-design.

x  Split out the i386 and DWARF specific code into separate source
   files chosen from configure.in so that multiple targets can be
   supported.  Use the full autoconf magic to allow for cross-ggcov.

x  Annotate source with per-function coverage summaries.  The challenge
   is that this breaks the identity between source code line and text
   widget line.

x  Annotate blocks with call and branch stats.

x  Show block boundaries in the Source window using one of:
   1. drawn rectangles with block number labelled, or
   2. 4-colour mapping, or
   3. a column showing block numbers(s) -- clicking on a block
      number selects the block.
   
x  Add a column to the Source window showing a comma-seperated list
   of block execution counts for each line.
   
x  Provide a menu command to export the file and function lists and
   summaries to useful formats, e.g. CSV, XML, Excel spreadsheet.
   
x  Add to the Properties window a list of filename and function name
   patterns to ignore, e.g. ignore functions matching "_GLOBAL_*".

x  Add to the Properties window an option to control display of
   filenames: full, basename, or minimal (default, dynamically calculated
   minimal unique trailing subset of path components).

x  Extend colour coding to all the places where a percentage, fraction,
   or count of coverage is shown, especially the appropriate columns in
   the Calls, Files and Functions windows.  Also the labels in the
   Summary window.
   
x  Handle the boundary case of the last block in a function properly.

x  Option to watch mtimes of .da files and reload them when they
   change, so that user can watch coverage stats update in realtime
   as their testsuite is run.
   
x  Option to aggregate coverage stats from multiple runs (multiple
   sets of .da files in separate directories).
   
x  In the Summary window, typing into the entry or popped-up list
   of the filename and function name combo boxes should seek in
   the list.

x  Add a menu command to the Source window to go to a specific line.

x  Add a menu command to the Source window to search for patterns.

x  Additional source annotations in the Source window (i.e. non-column
   additions like per-function stats) should be colour coded to
   make them distinct from non-executable lines of source.
   
x  Merge the Line column in the Calls window into the Call From column,
   so it's expressed as "function:line".

x  Make the default widths of the columns in the Call List window wide
   enough to actually show the label.

x  ??? Add a Weighted Sum to the Summary Overall window.

x  Arrows appear in all the sortable column titles...they should appear
   only in the current sort column.
      
x  ??? Minimise filenames only within the context of a program or library?

x  ??? Add option to only coverage shared libraries and ignore programs.

--- CLOSED ---

x  Handle shared libraries...scan the .dynamic structure of the executable
   for runtime path and list of sonames, resolve each, and recursively
   scan them for coveraged source files.

x  Change parsing of source for cpp dependencies to reuse a single
   dummy cov_line_t for lines which are suppressed but not otherwise
   needed, instead of allocating new ones. (Actually, lines are not
   allocated if they don't exist at suppression time).

x  Change logic for suppressing functions to allow functions which
   have no lines at all to *not* be supressed.
   
x  Need a commandline program which generates various reports
   like the GUI but to stdout in plain text, driven by command
   line options.

x  Provide a commandline option to specify one or more cpp symbols;
   code which depends positively (e.g. #if SYMBOL) on those symbols
   is suppressed.  Implies major change to architecture because
   suppression can now be applied to lines.

x  Configuring on RH9 seems to result in *not* getting the new
   text buffer line selection code.  Investigate....it seems that
   the gtk 2.2.1 on RH9 doesn't have this function.  The gtk2 patch
   I was given must have been against some more recent gtk.

x  Tree mode of Files window in GTK2 port is collapsed by default,
   should be expanded by default.

x  Colour coding of list/tree items doesn't work in GTK2 port.

x  Add a scaled down and rounded GNOME desktop icon.

x  Ggcov should start empty when given no arguments rather than
   attempt to read the directory ".", so it can be started by
   double-clicking on the GNOME desktop icon or from the GNOME
   applications menu.

x  Provide a menu command and window(s) which allows the user to 
   lose the current set of coverage data and read a new set, in
   any of the ways possible from the commandline, i.e. 1) exe
   2) dir 3) dir+recursion 4) set of source.
   
x  Get libgnome stuff (config, canvas, color picker) working in
   the gtk2 build.

x  Handle C & C++ inline functions in header files properly by
   creating cov_file_t objects for header files on demand, i.e.
   as locations for them are discovered in reading bbg files.

x  When turning on or off columns in the Source Window View menu,
   maintain the same visible lines in the text rather than scrolling
   back to the start.

x  Support new gcc 3.2 .bbg file format.

x  Make cov_file_t::read_bbg_function() more robust in the face
   of bad data (e.g. the new .bbg file format).

x  Fine tune -W* options for gcc 3.3.  Remove -Wmissing-declarations,
   C++ won't compile if the declarations are missing.  Apparently
   -Wnested-externs isn't for C++ either!?

x  The gtk2 version check at sourcewin.C:622 may be bogus...stay tuned.
   Hmm, the text buffer function is missing in gtk2-devel-2.2.1-29 on
   suse8.2.  Will have to add a special check.

x  In gtk2 build, check for popt library.

x  Add an option to do a recursive find of source files instead of
   a local find, e.g. "ggcov -r dir" being equivalent to
   "ggcov $(find dir -type f -name '*.[cC]')"

x  The GnomeCanvasPoints object used to display the arcs between
   nodes on the Call Graph are leaked.
   
x  The Call Graph SEGVs if used to display a C++ program, which
   does not define a "main" function but does not define a
   "int main (int, char**)" function.

x  Handle reading callgraph data from .o files generated by C++
   programs, by matching mangled names from the .o with unmangled
   names in the .bb file.
   
x  On platforms which attempt to load object files, fail gracefully
   when object files are missing.  Count the number of missing
   object files, issue a warning to the user if it's non-zero.
   
x  Implement the -o option of gcov which specifies a directory in
   which .bb .bbg and .da files are found (also .o for ggcov).
   
x  Add menu item to Source window to save the text with annotations.

x  Reorganise the text widget of the Source window so that there are
   (passive) column headers like a clist.  May require some trickery,
   even writing a new widget.  It might be useful to use multiple
   text widgets side by side to implement columns.
   
x  Add a menu command to the Source window to go to the Summary
   window for that source file.
   
x  Add a menu command to the Source window to go to the Summary
   window for the function containing the first selected line.

x  Add a menu command to the Source window to go to the Summary
   window for the range of selected lines.

x  Add a View menu to the Calls List window, with at least the ability
   to show/hide the various columns in the list and the colour coding.
   Column "Arc" to be hidden by default.

x  In the Source window, deal with large Filenames and Functions menus
   by splitting them up, like maketool's targets menu.  Or make them
   comboboxes in a toolbar, which would probably be easier.

x   Callgraphwin should label the two lists something easier to
    understand.  Instead of "Distibution to Ancestors" something like
    "Called From".

x  Colour code red/green the entries in the Function List, Calls List
   etc windows.
   
x  Colour-code the coverage stats cells in the Function List and
   File List windows.
   
x  Preferences window pane to control colour coding colours.

x  Added a Properties window which allows the user to control the
   colours used for colour coding.

x  Add to the Properties window an option to re-use the same Source
   window instead of popping up new ones all the time.

x  Source files found by all techniques should generate full pathnames,
   including especially cov_read_directory() and cov_read_source_file().   

x  cov_file_t are kept in a hashtable, and the only standard iteration
   mechanism uses this hashtable, which is very clunky as it requires
   passing a function pointer to be called for every cov_file_t. OTOH
   there is a global alphabetically sorted list of minimal file names.
   Replace that global list of filenames with a static member list of
   cov_file_t, sorted in alphabetical minimal file name order, built
   in cov_post_read.  Replace the clunky iteration interface with a
   list iterator over that list.

x   Rename Windows->New Call Graph to Windows->New Call Butterfly and
    Windows->New Call Graph2 to Windows->New Call Tree.
    
x  Calls List window should have an "All Functions" entry in the
   Function combo box.  This should be the first and default entry.
   
x  Add another column to the Calls List window, so it has both From
   and To function names.
   
x  Double-clicking on rows in the Calls List window should show the
   source for that call.
   
x  Add a "Files List" window analagous to the existing "Functions List"
   window: shows list of all filenames, with columns for various test
   coverage stats, all columns sortable.  Double-clicking on a filename
   pops up a Source window for that file.

x  Add menu commands to the Windows menu to create new Summary window
   etc, and replace all the initial startup windows with just an
   overall Summary.

x  Try to correlate the call numbers from blocks with function symbols
   by looking up ELF relocs and debug line number records in the object
   files using the BFD library.  For each reloc, reloc -> address ->
   linenumber -> block(s).  May be tricky, especially when blocks
   overlap on a line.
   
x  Add Help->About, Help->Licence etc menu commands.

x  Add icon.

x   The File->Close and File->Exit callbacks in each window can now be
    made unique, as there is a virtual window_t dtor to enable correct
    cleaning up.

x  Check to see if RedHat have released an update for gcc to fix
   the fake flag braindeath.
   Long since fixed, in gcc 3.x series.

x  make the fuzzy-solve flag the default

x  git-history-coverage needs the --gcda-prefix option too

x  git-history-coverage needs to use Getopt or equivalent
   so --foo=bar form works

x  Merge all the unit tests into a single executable and use a
   half-decent attempt at a unit test framework.

x  Remove uses of hashtable_t::foreach() and replace them with
   hashtable_iter_t which can only make for more readable code.

x  the block/s which implement the failure case for the system
   assert() macro should be suppressed by default so that they
   don't count as uncovered blocks.
x  Suppress blocks on the failure branch of the assert() macro.

x  On the flow diagrams in the Source window, add a tooltip on each
   block with the block's number, count & status, arcs and their counts,
   and any discovered call.

x  Remember in prefs the size of the Source window.
x  Remember in prefs the set of visible columns in the Source window.

x  Make persistent the state of the check menu items in the Calls
   window.

x  in the Source window, the Filenames drop-down box should contain a tree not a list

x  Grey out the View->Block Diagram... menu item in the Source
   window unless a function is selected.

x  Suppress the Cobertura report from the Report window.

x  In the Source window, show branches graphically, as drawn arrows
   (labelled with branch probablities) from one block to another.
   
x  Add column titles to Source window, with the ability to hide them,
   visible by default, state saved automatically.
   
x  maybe mark or log the functions that failed solve to make it obvious
   to the gui user