[MI] -file-list-exec-source-files

Andrew Cagney cagney@gnu.org
Tue Feb 17 18:22:00 GMT 2004


> On Mon, Feb 16, 2004 at 10:46:28AM -0500, Daniel Jacobowitz wrote:
> 
>> On Mon, Feb 16, 2004 at 10:33:29AM -0500, Bob Rossi wrote:
> 
>> > Here is the problem I am trying to solve.
>> > 
>> > Any front end needs to know the absolute path to the source files. From
>> > what I can see, there are several ways of finding the absolute path.
>> > In some cases, all of this info is needed.
> 
>> 
> 
>> > So, basically, I am making an assumption, if GDB can not find the
>> > absolute path to the source file, the front end can not. Is this true?
>> > Also, why should the front ends do it, if it can be done correctly in
>> > one place?
> 
>> 
>> Then why are you trying to return symtab->dirname at all?  Or have I
>> misinterpreted you, and you were returning symtab->fullname?  I don't
>> think symtab->dirname should be exposed in this interface.
> 
> 
> Yes, please excuse me. I am only interested in returning the fullname to
> the front end. I agree with you, symtab->dirname is only useful
> internally in resolving the fullname.
> 
> 
>> > As far as I know, most existing front ends use annotate level 1-2-3 to
>> > figure out where the source file is. I just want to simplify this
>> > process, so that front ends can easily get the absolute path to the
>> > source file without having to run multiple commands, like the CLI.
> 
>> 
>> This sounds like the front end is only ever interested in one source
>> file at a time, so that would be a more efficient design than asking
>> GDB to provide fullnames for every source file at once.

To badly generalize, front ends come in two flavours:

- integrated IDEs such as eclipse where the front end thinks it knows 
everything

- lighter weight debugger interfaces (Insight, xxgdb, ...) where, 
instead, GDB is relied on for the information

In the latter case a full and correct list of file names is entirely 
reasonable. e.g., for a filename tab or filename browser.

> Here there is several points to make.
> 
> 1. The front should be able to get the fullname for a single source.
> 
> -file-list-exec-source-file currently returns the fullname of the
> currently executing file. Which btw, has already had it's symtab read
> in. This is why symtab->dirname is set, and the fullname is accessible.
> 
> An parameter should be added to -file-list-exec-source-file. So it can be
> invoked like "-file-list-exec-source-file foo.c"
> With this new command, the user should get the fullname of a particular
> source file, which means reading in the symtab, or modifying the psymtab
> to have the dirname in it.

As the doco suggests, the command's spec came from knowing that 
equivalent functionality was required by Insight (see gdb_listfiles in 
that code base).

I think -file-list-exec-source-files should take the wild card (and not 
-file-list-exec-source-file) because that is returning a list, its only 
a small jump to have it return a qualified list.

Also ...

> 2. The user should be able to get all of the fullnames with
> -file-list-exec-source-files?
> 
> Currently, -file-list-exec-source-files, prints all of the "filenames"
> by looping through the symtabs and psymtabs. It knows the fullname to
> most of the symtabs, and none of the psymtabs. So, for some files, it
> prints the filename, along with the fullname, and for others it just
> prints the filename.
> 
> If it just lists the "filename" and the front wants the "fullname", it
> can use the "filename" as the parameter to -file-list-exec-source-file,
> which will return the "fullname".
> 
> However, if the front end wants all of the fullnames, should we make it
> send N commands to -file-list-exec-source-file, or should
> -file-list-exec-source-files take an optional parameter to force it to
> find all of the fullnames?

(Yes, making a front end do that would be dumb :-)

> Basically, this means, GDB will give you all the "filenames" (keys) of
> the current executable. Then, if you want the "fullname"(value), use the
> "filename"(key) as an argument to -file-list-exec-source-file which will
> return the "fullname"(value).
> 
> Hmmm, is this a little to confusing?

... I'd specify the interface such that it is expected to return fully 
qualified file names.   I don't think anything less than that is useful.

So ... what I think has been identified is the need for a symtab query 
that returns a list of the currently known fully qualified source files. 
  How the symtab chooses to implement that query is a separate problem.

This would of course make the implementation something like:

mi_file_list_exec_source_files (..)

   char **source_files = symtab_lookup_source_files (<pattern>);
   for all source_files
     generate MI output

and likely a first draft based somewhat on existing code.

Andrew




More information about the Gdb mailing list