Check your logs. Here's an example of an assert in ROM code (arbitrary, there's no way you'd actually want to do this):

void do_say (CHAR_DATA * ch, char *argument)
{
   OBJ_DATA *obj, *obj_next;

   assert(argument[0] != '\0');
...

Now,
[EMAIL PROTECTED] log $ tail 1000.log
Wed Jul 28 10:36:37 2004 :: Pointing! (fiddlesticks)
Wed Jul 28 10:36:37 2004 :: Loading skills.
Wed Jul 28 10:36:37 2004 :: Loading skill 0...
Wed Jul 28 10:36:37 2004 :: [test] SkillTable[0].name = skull
Wed Jul 28 10:36:37 2004 :: 1 skills loaded.
Wed Jul 28 10:36:37 2004 :: ROM is ready to rock on port 2323 (0.0.0.0).
Wed Jul 28 10:36:48 2004 :: Sock.sinaddr:  192.168.1.102
Wed Jul 28 10:36:49 2004 :: Loading Cheez.
Wed Jul 28 10:36:51 2004 :: [EMAIL PROTECTED] has connected.
rom: act_comm.c:777: void do_say(CHAR_DATA*, char*): Assertion `argument[0] != '\0'' failed.


Dale Kingston wrote:

And how do I see the results from assert?

----- Original Message ----- From: "Jeremy Hill" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, July 27, 2004 10:58 PM
Subject: re: Saving and Crashing...? (repost stupid outlook)



I don't particularly know what's going on, but the code is telling you
it is segfaulting trying to access fp.

Try adding
#include <assert.h>

at the top of __FILE__, then replacing:

934             fprintf( fp, "#O\n" );

with:
<>
assert(fp);
fprintf( fp, "#O\n" );

or:

assert(fprintf( fp, "#O\n" ));


At the very least, assert will give you some more information about the
next crash.  Assert, next to GDB, is your best friend.

-- Jeremy


Dale Kingston wrote:


Ok well for a small while maybe a week my muds been having this odd habit
(fit?) where it likes to crash while in fwrite_obj. The people it crashs

on

is random, but the thing that always remains the same oddly is the number

of

frams... At first I thought it was looping through an endless link list

of

items... but after looking at it none of the items are repeating... Here
GDB's input:

This GDB was configured as "i386-redhat-linux"...
Core was generated by `../src/rom 5000'.
Program terminated with signal 11, Segmentation fault.
Loaded symbols for /lib/libresolv.so.2
#0  0x081c7c5a in obj_data::fwrite_obj (this=0x41167c84, ch=0x41099138,
  fp=0x87aac98, iNest=0) at save.cc:934
934             fprintf( fp, "#O\n" );

Now I'll save you the back trace but needless to say concistantly fram

168

is always where the saving starts so thers always the same number of

frams

before it kills over

(gdb) info local
this = (obj_data *) 0x41099138
ed = (EXTRA_DESCR_DATA *) 0x0
obj = (OBJ_DATA *) 0x41167c84
paf = (AFFECT_DATA *) 0x829eba5
dot = (DOT_DATA *) 0x87aac98
pGem = (req_gem_mod_type *) 0x81c8866
buf = '\000' <repeats 12 times>,
"[EMAIL PROTECTED]/[EMAIL PROTECTED]
\000\003\000\000\000R∞#\b", '\000' <repeats 12 times>, "á1\e@", '\000'
<repeats
16 times>, "α═\016@", '\000' <repeats 186 times>, "d ", '\000' <repeats

48

times


, "╖/α┐\n", '\000' <repeats 19 times>,


"\001\000\000\000R∞#\bΦ*α┐╪0α┐\013\000\0
00\000\000\000\000\000╕/α┐\000\000\000\000\003\000\000\000    ", '\000'
<repeats
112 times>, "R∞#\b", '\000' <repeats 220 times>, "╕╗\037\b≡/α┐", '\000'
<repeat
s 980 times>, "[EMAIL PROTECTED]"...
where_vnum = 35001

None of the values are bad.... Also the odd thing of this all is I have
signal handlers which for the most part catch everything. But for some
reason it doesn't catch this the mud just dies and my startup script
restarts.

Any suggestions? Could it be my saving function is taking too long so it
thinks it's looping endlessly?

Heres some surroudning source:

else
{
   if ( obj->in_obj != NULL )
      where_vnum = ROOM_VNUM_TEMPLE;
   if ( obj->in_room != NULL )
      where_vnum = obj->in_room->vnum;

   if ( obj->in_room == NULL && obj->in_obj == NULL )
      obj->in_room = get_room_index( ROOM_VNUM_LIMBO );
}

   fprintf( fp, "#O\n" );
   fprintf( fp, "Vnum %d\n",   obj->pIndexData->vnum        );
   if (ch == NULL)
    fprintf( fp, "WhereVnum    %d\n",   where_vnum             );
   if (!obj->pIndexData->new_format)
fprintf( fp, "Oldstyle\n");
   if (obj->enchanted)
fprintf( fp,"Enchanted\n");
   fprintf( fp, "Nest %d\n", iNest         );





--
ROM mailing list
[email protected]
http://www.rom.org/cgi-bin/mailman/listinfo/rom





Reply via email to