2.0.2 and GConf
Mark Johnson
mrj001 at shaw.ca
Wed Nov 29 23:21:58 EST 2006
David Hampton wrote:
>On Wed, 2006-11-29 at 14:23 -0700, Mark Johnson wrote:
>
>
>>...
>>
>>#6 0xb7529807 in gnc_gconf_remove_notification (object=0x814d940,
>>section=0x0, whoami=0x809aeb0 "\030Ý\t\b\017")
>> at gnc-gconf-utils.c:867
>>#7 0xb7e3410b in gnc_main_window_destroy (object=0x814d940) at
>>gnc-main-window.c:1817
>>
>>
>
>The #6 call frame shouldn't be possible. The calling function passes a
>constant string to gnc_gconf_remove_notification as the section name,
>and has done so since that argument was added to the function. You're
>also showing garbage for the whoami argument, another a constant string.
>Any chance you have another copy of gnucash on your system, or didn't
>get a complete compile of the tree?
>
>David
>
>
Interesting. Wouldn't #6 & #7 be in the same binary file (i.e.
gnucash-bin)? I don't understand how an incomplete compile would lead
to this problem, unless the two functions were in a different binary and
I had two installs of gnucash.
I checked there are no other copies of gnucash-bin on either of my
systems. So far as I know, each system has only a single install of
gnucash.
My first thought was that something had corrupted the memory containing
the constant string. Once I found that this constant string is define
as a #define macro, I thought perhaps the stack was being corrupted. So
I tried another run with gdb. Here it is:
(gdb) break gnc-main-window.c:1817
Breakpoint 1 at 0xb7da50e1: file gnc-main-window.c, line 1817.
(gdb) cont
Continuing.
[Switching to Thread -1230575392 (LWP 28819)]
Breakpoint 1, gnc_main_window_destroy (object=0x814d940) at
gnc-main-window.c:1817
1817 gnc_gconf_remove_notification(G_OBJECT(window),
GCONF_GENERAL,
(gdb) print GCONF_GENERAL
No symbol "GCONF_GENERAL" in current context.
(gdb) help next
Step program, proceeding through subroutine calls.
Like the "step" command as long as subroutine calls do not happen;
when they do, the call is treated as one instruction.
Argument N means do this N times (or till program stops for another reason).
(gdb) help step
Step program until it reaches a different source line.
Argument N means do this N times (or till program stops for another reason).
(gdb) step
gnc_gconf_remove_notification (object=0x814d940, section=0x814d940 "
Ä\024\b\003",
whoami=0xb7de2378 "GncMainWindow") at gnc-gconf-utils.c:855
855 g_return_if_fail(G_IS_OBJECT(object));
(gdb) print *section
$1 = 32 ' '
(gdb) print *whoami
$2 = 71 'G'
I find this disturbing. I did one single step, from call frame #7 in
the original backtrace to #6. Note that object and section point to the
same memory location!!!!
Also, the value of section on the previous run was 0x0 at the time of
the failure. So I try again:
(gdb) cont
Continuing.
[Switching to Thread -1230882592 (LWP 1142)]
Breakpoint 1, gnc_main_window_destroy (object=0x814d940) at gnc-main-window.c:1817
1817 gnc_gconf_remove_notification(G_OBJECT(window), GCONF_GENERAL,
(gdb) step
gnc_gconf_remove_notification (object=0x814d940, section=0x814d940 "", whoami=0xb7d97378 "GncMainWindow")
at gnc-gconf-utils.c:855
855 g_return_if_fail(G_IS_OBJECT(object));
(gdb) print section
$1 = (const gchar *) 0x814d940 ""
(gdb) n
850 {
(gdb) print section
$2 = (const gchar *) 0x814d940 ""
(gdb) n
855 g_return_if_fail(G_IS_OBJECT(object));
(gdb) print section
$3 = (const gchar *) 0x814d940 ""
(gdb) n
856 g_return_if_fail(whoami != NULL);
(gdb) print section
$4 = (const gchar *) 0x1 <Address 0x1 out of bounds>
Now, I find this really puzzling. Any suggestions? (I am assuming
g_return_if_fail is a macro that does what its name suggests.)
This does not look like the sort of thing that occurs when debugging
optimized code, but I am going to try a build without optimization anyway.
Mark
More information about the gnucash-devel
mailing list