This is a good start. Let me walk you through the interesting bits of that output:
Code:
Program terminated with signal 11, Segmentation fault.
#0 0x080f2a98 in fname (namelist=0x0) at handler.c:42
42 for (point = holder; isalpha(*namelist); namelist++, point++)
Here, we see that namelist is "0x0". This is what we call NULL when programming, and it means that whatever we've passed to fname() has not been set to anything useful. So, our next question is,
what did we pass to fname()?
Code:
#1 0x08076d70 in do_doorbash (ch=0xada0148, argument=0xbf8652e9 " w", cmd=506, subcmd=0) at act.offensive.c:793
793 sprintf(buf, "$n *CRASHES* through the %s!", fname(EXIT(ch, dir)->keyword));
We're passing EXIT(ch, dir)->keyword to the fname() function. We see that this happens in act.offensive.c at line 793.
So, by now we know that some door keyword is not initialized. How to find out which door? Well, we can print some info, but because gdb doesn't work with macros, we need to look them up.
The EXIT macro is defined here:
github.com/tbamud/tbamud/blob/41da68bdb0...ba6/src/utils.h#L829
Code:
#define EXIT(ch, door) (world[IN_ROOM(ch)].dir_option[door])
And IN_ROOM is also a macro. It's defined here
github.com/tbamud/tbamud/blob/41da68bdb0...ba6/src/utils.h#L460
Code:
#define IN_ROOM(ch) ((ch)->in_room)
So, we're interested in the name of the room and the direction. Well, the direction is readily apparent from the argument: "argument=0xbf8652e9 " w"," means the door is probably to the west in that room.
Next, we need to know more about which room we're dealing with. And it just so happens that the macros help us out:
Code:
frame 1
print world[ch->in_room]
print *world[ch->in_room]
One of those print statements will list out information about the room, among other things it's vnum. After that, it's just a question of fixing the buggy door.