Hi all,
I keep getting an assertion in winedbg, before I try and find out the cause does anyone know the possible reason for this?
winedbg: types.c:573: DEBUG_CopyFieldList: Assertion 'dt->type == dt2->type && ((dt->type == DT_STRUCT) || (dt->type == DT_ENUM))' failed.
It looks like its an issue with parsing the debug info, but the windows application debugs just fine with MS Developer Studio 6.
Thanks, Dave Hawkes
Dave Hawkes wrote:
Hi all,
I keep getting an assertion in winedbg, before I try and find out the cause does anyone know the possible reason for this?
winedbg: types.c:573: DEBUG_CopyFieldList: Assertion 'dt->type == dt2->type && ((dt->type == DT_STRUCT) || (dt->type == DT_ENUM))' failed.
It looks like its an issue with parsing the debug info, but the windows application debugs just fine with MS Developer Studio 6.
can you tell me when this happens ? are you trying to run some command, or is it while loading some symbols... if the later, which library is currently loaded ?
A+
This occurs whenever winedbg attempts to load the symbols from a particular large application that I have, either due to a fault or if I start windbg directly on the command line. The debug terminal window will start with the winedbg starting message appearing and will them immediately terminate with this error.
Dave Hawkes
----- Original Message ----- From: "eric pouech" eric.pouech@wanadoo.fr To: "Dave Hawkes" daveh-wine@cadlink.com Cc: wine-devel@winehq.com Sent: Tuesday, November 20, 2001 1:20 PM Subject: Re: winedbg error
Dave Hawkes wrote:
Hi all,
I keep getting an assertion in winedbg, before I try and find out the
cause
does anyone know the possible reason for this?
winedbg: types.c:573: DEBUG_CopyFieldList: Assertion 'dt->type ==
dt2->type
&& ((dt->type == DT_STRUCT) || (dt->type == DT_ENUM))' failed.
It looks like its an issue with parsing the debug info, but the windows application debugs just fine with MS Developer Studio 6.
can you tell me when this happens ? are you trying to run some command, or is it while loading some symbols... if the later, which library is currently loaded ?
A+
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/) "The future will be better tomorrow", Vice President Dan Quayle
Dave Hawkes wrote:
This occurs whenever winedbg attempts to load the symbols from a particular large application that I have, either due to a fault or if I start windbg directly on the command line. The debug terminal window will start with the winedbg starting message appearing and will them immediately terminate with this error.
ok, sounds like winedbg is loading MSC debug info and fails... you could remove the assert in types.c (for DEBUG_CopyFieldlist) another quick test would be to print, in DEBUG_CopyFieldlist, the reasons of the failed assertion: if (!(dt->type == dt2->type && ((dt->type == DT_STRUCT) || (dt->type == DT_ENUM)))) { DEBUG_Printf(DBG_CHN_MESG, "Copyfield list mismatch (%d<>%d): ", dt->type, dt2->type); DEBUG_PrintTypeCast(dt); DEBUG_Printf(DBG_CHN_MESG, " "); DEBUG_PrintTypeCast(dt2); DEBUG_Printf(DBG_CHN_MESG, "\n"); } just to see what gives...
Hi Eric,
After some experimenting along the lines that you suggested (DEBUG_PrintTypeCast faulted!), it may be that the problem is something to do with the 'bool' type as I now eventually get lots of errors like this:
Unknown type '1' failure on _Bool:t(0,21)=@s8;-16; at 16;
Dave
----- Original Message ----- From: "eric pouech" eric.pouech@wanadoo.fr To: "Dave Hawkes" daveh-wine@cadlink.com Cc: wine-devel@winehq.com Sent: Tuesday, November 20, 2001 3:12 PM Subject: Re: winedbg error
Dave Hawkes wrote:
This occurs whenever winedbg attempts to load the symbols from a
particular
large application that I have, either due to a fault or if I start
windbg
directly on the command line. The debug terminal window will start with
the
winedbg starting message appearing and will them immediately terminate
with
this error.
ok, sounds like winedbg is loading MSC debug info and fails... you could remove the assert in types.c (for DEBUG_CopyFieldlist) another quick test would be to print, in DEBUG_CopyFieldlist, the reasons of the failed assertion: if (!(dt->type == dt2->type && ((dt->type == DT_STRUCT) || (dt->type == DT_ENUM)))) { DEBUG_Printf(DBG_CHN_MESG, "Copyfield list mismatch (%d<>%d): ", dt->type, dt2->type); DEBUG_PrintTypeCast(dt); DEBUG_Printf(DBG_CHN_MESG, " "); DEBUG_PrintTypeCast(dt2); DEBUG_Printf(DBG_CHN_MESG, "\n"); } just to see what gives...
--
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/) "The future will be better tomorrow", Vice President Dan Quayle
On Wed, 21 Nov 2001, Dave Hawkes wrote:
Hi Eric,
After some experimenting along the lines that you suggested (DEBUG_PrintTypeCast faulted!), it may be that the problem is something to do with the 'bool' type as I now eventually get lots of errors like this:
Unknown type '1' failure on _Bool:t(0,21)=@s8;-16; at 16;
Did you compile with GCC-3.X? I've gotten the same errors when using winedbg on a version of Wine compiled with Red Hat's gcc3 package in Red Hat 7.2. I think that gcc-3.X is known to have a different debugging format than previous versions.
James
-- James Juran jamesjuran@alumni.psu.edu
Yes, wine is built with GCC3...
Dave Hawkes
----- Original Message ----- From: "James Juran" james@juran.dhs.org To: "Dave Hawkes" daveh-wine@cadlink.com Cc: "eric pouech" eric.pouech@wanadoo.fr; wine-devel@winehq.com Sent: Wednesday, November 21, 2001 4:20 PM Subject: Re: winedbg error
On Wed, 21 Nov 2001, Dave Hawkes wrote:
Hi Eric,
After some experimenting along the lines that you suggested (DEBUG_PrintTypeCast faulted!), it may be that the problem is something
to
do with the 'bool' type as I now eventually get lots of errors like
this:
Unknown type '1' failure on _Bool:t(0,21)=@s8;-16; at 16;
Did you compile with GCC-3.X? I've gotten the same errors when using winedbg on a version of Wine compiled with Red Hat's gcc3 package in Red Hat 7.2. I think that gcc-3.X is known to have a different debugging format than previous versions.
James
-- James Juran jamesjuran@alumni.psu.edu
After some experimenting along the lines that you suggested (DEBUG_PrintTypeCast faulted!),
hmmm may be the type isn't fully initialized... strange indeed
it may be that the problem is something to do with the 'bool' type as I now eventually get lots of errors like this:
would the attached patch fix is someway ? if it does, I'll provide a more elaborate fix.
A+
Yes, this partially fixed one warning message (which could be due to GCC3), though I still get the type mismatches.
Example type mismatch (from your previous debugging code):
Copyfield list mismatch (4<>1): enum CDecBorderDialogBarPage::__unnamed --invalid--*
The --invalid-- is from code I added to prevent a NULL pointer being used (the in memory type info for the pointer was invalid).
I also now only get this warning after the type mismatch warning.
failure on _Bool:t(0,21)=@s8;-16; at ;
Dave Hawkes
----- Original Message ----- From: "eric pouech" eric.pouech@wanadoo.fr To: "Dave Hawkes" daveh-wine@cadlink.com Cc: wine-devel@winehq.com Sent: Wednesday, November 21, 2001 5:03 PM Subject: Re: winedbg error
After some experimenting along the lines that you suggested (DEBUG_PrintTypeCast faulted!),
hmmm may be the type isn't fully initialized... strange indeed
it may be that the problem is something to do with the 'bool' type as I now eventually get lots of errors like
this:
would the attached patch fix is someway ? if it does, I'll provide a more elaborate fix.
A+
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/) "The future will be better tomorrow", Vice President Dan Quayle
---------------------------------------------------------------------------- ----
Index: stabs.c
RCS file: /usr/share/cvs/cvsroot/wine/wine/debugger/stabs.c,v retrieving revision 1.41 diff -u -r1.41 stabs.c --- stabs.c 2001/08/10 22:29:21 1.41 +++ stabs.c 2001/11/21 22:01:31 @@ -516,8 +516,24 @@ new_dt = DEBUG_NewDataType(lo, ptd->buf + idx); ptd->idx = idx; break;
- case '-':
if (DEBUG_PTS_ReadNum(ptd, &lo) == -1) {
- DEBUG_Printf(DBG_CHN_MESG, "Should be a number...\n");
- return -1;
}
switch (lo)
{
case 1: new_dt = DEBUG_TypeInt; break;
case 7: new_dt = DEBUG_TypeShortUInt; break;
case 16: new_dt = DEBUG_TypeUSInt; break;
case 19: new_dt = DEBUG_TypeString; break;
default:
- DEBUG_Printf(DBG_CHN_MESG, "Unsupported integral type (%d)\n", lo);
- return -1;
}
default:break;
DEBUG_Printf(DBG_CHN_MESG, "Unknown type '%c'\n", *ptd->ptr);
} }DEBUG_Printf(DBG_CHN_MESG, "Unknown type '%c'\n", ptd->ptr[-1]); return -1;
Dave Hawkes wrote:
Yes, this partially fixed one warning message (which could be due to GCC3), though I still get the type mismatches.
well, the warning you got (in Bool type) may be caused by GCC3 (some other stabs information), but not the one in Copyfield. this one comes from an error in MSC debug info, so GCC shouldn't play role (except if there's memory trashing)
Example type mismatch (from your previous debugging code):
Copyfield list mismatch (4<>1): enum :__unnamed --invalid--*
hmm this sounds like C++ code... which winedbg doesn't currently handle properly... there's also lots of unsupported features in MSC debug info loading (see debugger/msc.c for an outlook) (could you anyway tell me the def of CDecBorderDialogBarPage)
this will be rather hard to debug and fix remotely...
I also now only get this warning after the type mismatch warning.
failure on _Bool:t(0,21)=@s8;-16; at ;
well, it seems we need to chew the ';' too (but this won't fix the issue above) add if (*ptd->ptr++ != ';') return -1; in the patch I already sent you (here's the whole modif)
case '-': if (DEBUG_PTS_ReadNum(ptd, &lo) == -1) { DEBUG_Printf(DBG_CHN_MESG, "Should be a number...\n"); return -1; } switch (lo) { case 1: new_dt = DEBUG_TypeInt; break; case 7: new_dt = DEBUG_TypeShortUInt; break; case 16: new_dt = DEBUG_TypeUSInt; break; case 19: new_dt = DEBUG_TypeString; break; default: DEBUG_Printf(DBG_CHN_MESG, "Unsupported integral type (%d)\n", lo); return -1; } if (*ptd->ptr++ != ';') return -1; break;
This now fixes all the warnings due to GCC3, so this patch could now be submitted.
I still have the problem with the main application C++ code, everytime I rebuild the application it gives a warning on a different class or structure, so the problem may be related to the size of the application (It takes an hour to build on 2 x 1200Mhz machine).
Now that I have got the debugger to ignore these errors it continues load the application, but eventually freezes without any warning or error at some point during the rest of the loading process. I'll try and break into gdb to find out what else gives now...
Thanks Dave Hawkes
----- Original Message ----- From: "eric pouech" eric.pouech@wanadoo.fr To: "Dave Hawkes" daveh-wine@cadlink.com Cc: wine-devel@winehq.com Sent: Thursday, November 22, 2001 1:04 PM Subject: Re: winedbg error
Dave Hawkes wrote:
Yes, this partially fixed one warning message (which could be due to
GCC3),
though I still get the type mismatches.
well, the warning you got (in Bool type) may be caused by GCC3 (some other stabs information), but not the one in Copyfield. this one comes from an error in MSC debug info, so GCC shouldn't play role (except if there's memory trashing)
Example type mismatch (from your previous debugging code):
Copyfield list mismatch (4<>1): enum :__unnamed --invalid--*
hmm this sounds like C++ code... which winedbg doesn't currently handle properly... there's also lots of unsupported features in MSC debug info loading (see debugger/msc.c for an outlook) (could you anyway tell me the def of CDecBorderDialogBarPage)
this will be rather hard to debug and fix remotely...
I also now only get this warning after the type mismatch warning.
failure on _Bool:t(0,21)=@s8;-16; at ;
well, it seems we need to chew the ';' too (but this won't fix the issue above) add if (*ptd->ptr++ != ';') return -1; in the patch I already sent you (here's the whole modif)
case '-': if (DEBUG_PTS_ReadNum(ptd, &lo) == -1) { DEBUG_Printf(DBG_CHN_MESG, "Should be a number...\n"); return -1; } switch (lo) { case 1: new_dt = DEBUG_TypeInt; break; case 7: new_dt = DEBUG_TypeShortUInt; break; case 16: new_dt = DEBUG_TypeUSInt; break; case 19: new_dt = DEBUG_TypeString; break; default: DEBUG_Printf(DBG_CHN_MESG, "Unsupported integral type (%d)\n", lo); return -1; } if (*ptd->ptr++ != ';') return -1; break;
--
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/) "The future will be better tomorrow", Vice President Dan Quayle