This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hello, This is a suggestion to enhance GDB when printing arrays. The idea is that the default and currently only way for GDB to print arrays is to print them as a sequence of elements, separated by a coma, like this: (gdb) p array $1 = {1, 2, 3, 4} The idea is that, for large arrays, it's sometimes convenient to print them in a form where the index of each element is printed prior to the array element itself. In Ada, the notation for doing is <index> => <array element> So, the idea would be for GDB to print the above array as: (gdb) p array $2 = {0 => 1, 1 => 2, 2 => 3, 3 => 4} For my personal usage, I find this to be very convenient when dealing with super large arrays such as the regnum-to-regname arrays that we frequently have in GDB. I'm always concerned about being off by one when counting. Having the index simplifies the process a little bit. So, the suggestion is to have the feature being controled by a set/show command; I suggest: (gdb) set/show print array-indexes With a default of "off", to preserve the current behavior. For the moment, the patch I am submitting here is using the Ada notation, because C/C++/ObjC don't provide this way of "qualifying" each element. Not sure about Fortran or Pascal. We can certainly make this a language method, with a default method. Testcase and documentation will come shortly after we've agreed on the principle and the design. 2005-09-06 Joel Brobecker <brobecker@adacore.com> * valprint.c (print_array_indexes): New variable. (show_print_array_indexes): New function. (print_array_indexes_p): New function. (maybe_print_array_index): New function. (val_print_array_elements): Add new parameter real_index_offset. Print the index of each element if required by the user. (_initialize_valprint): Add new print-array-indexes set/show command. * valprint.h (print_array_indexes_p): Add declaration. (maybe_print_array_index): Likewise. (val_print_array_elements): Update parameter list. * c-valprint.c (c_val_print): Update call to val_print_array_elements. * p-valprint.c (pascal_val_print): Likewise. * ada-valprint.c (ada_get_array_low_bound_and_type): New function, mostly extracted from print_optional_low_bound(). (print_optional_low_bound): Replace extracted code by call to ada_get_array_low_bound_and_type(). Stop printing the low bound if indexes will be printed for all elements of the array. (val_print_packed_array_elements): Print the index of each element of the array if necessary. (ada_val_print_1): For non-packed arrays, compute the array low bound, and pass it to val_print_array_elements(). Tested on x86-linux, no regression. Opinions? -- Joel
Attachment:
indexes.diff
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |