This is the mail archive of the gdb@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]

Re: [RFC] Signed/unsigned character arrays are not strings


On Sat, 24 Feb 2007 21:11:02 +0100, Nick Roberts wrote:
>  > Does adding an appropriate (char *) cast fix the problem, and do you
>  > think it's reasonable?
> 
> If you mean in .gdbinit, changing
...
>   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
...
> to:
...
>   output (char *) ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
...
> makes no difference.

You have an association bug there.  In fact such workaround works [attached].
	(gdb) xbacktrace 
	0x92e75aa "recursive-edit" (0xa420a23)
	0x92e685c "byte-code" (0x825e7db)
	...

> I don't understand why unsigned chars should be printed as arrays except to
> solve Jan's particular problem.  Maybe Emacs uses unsigned char for 8 bit
> character sets like iso_8859-1:
> 
> 2000-01-04  Gerd Moellmann  <gerd@gnu.org>
> 
> 	* lisp.h (struct Lisp_String): Make DATA member `unsigned char *'.

Either you consider the type still as a normal C string and in this case it
should be `{,const} char *'.  Or you consider it as some arbitrary data (due to
its character set not matching the system default one) and in this case it is
is best to display the numerical value of each of its array element.  Printing
it just as a string just outputs invalid characters to the debugger's screen.

I believe Emacs should revert to using `char *' but I do not know the reasons
for the Gerd Moellmann's change above.


> Like another change that Ulrich Drepper is proposing (%a) this patch changes
> existing behaviour.  Why not just add a new output format, or boolean variable?

As in such case one can drop the patch completely as no-one would ever figure
such new output format exists.  Sure such decision would also make a sense.



Regards,
Jan
--- emacs-22.0.93/src/.gdbinit-orig	2007-01-21 23:51:40.000000000 +0100
+++ emacs-22.0.93/src/.gdbinit	2007-02-24 21:35:08.000000000 +0100
@@ -978,7 +978,7 @@
 
 define xprintstr
   set $data = $arg0->data
-  output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
+  output (const char *) (($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte))
 end
 
 define xprintsym

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]