>Since you cant examine the stack with gdb, why not run the program from >inside gdb? load it up with gdb bin/circle. in it type set args -q 4000(or >whatever args you us) create your char, but send a Ctrl-Z to gdb when you >get to the menu, send the command and step through the code a couple lines >at a time. I wouldnt suggest doing this on a port other players log onto >though...cuz it will apear that the mud is frozen while you step through it Sun Jul 20 07:24:33 :: New connection. Waking up. Sun Jul 20 07:28:12 :: SYSERR: Couldn't open player file pfiles/a/abc Sun Jul 20 07:28:12 :: Abc [henge1.henge.com] new player. Sun Jul 20 07:28:15 :: Abc entering game with no equipment. Sun Jul 20 07:28:15 :: Abc advanced to level 1 It seemed to work through gdb: gdb bin/circle run -q 5000 At least it didn't crash. So then i think, well maybe the bug(virus) is a 24 hour virus(this has happened to me before so...) so i try it w/o gdb: By what name do you wish to be known? abcII ... Select a class: [C]leric [T]hief [W]arrior [M]agic-user Class: c Connection closed by foreign host. Crashed Sun Jul 20 07:32:47 :: SYSERR: Couldn't open player file pfiles/a/abcii Ok, someone suggested running a backtrace while the mud is running and at class suspend it and bt is. This is what i get: **SUSPENDED** 0x40020287 in __select () (gdb) bt #0 0x40020287 in __select () #1 0x4009fa8c in __DTOR_END__ () #2 0x8049624 in init_game (port=5000) at comm.c:244 #3 0x80495aa in main (argc=3, argv=0xbffffd68) at comm.c:214 #4 0x804926b in _start () Now i go through the frames: (gdb) frame 0 #0 0x40020287 in __select () (gdb) frame 1 #1 0x4009fa8c in __DTOR_END__ () (gdb) frame 2 #2 0x8049624 in init_game (port=5000) at comm.c:244 244 game_loop(mother_desc); (gdb) frame 3 #3 0x80495aa in main (argc=3, argv=0xbffffd68) at comm.c:214 214 init_game(port); (gdb) frame 4 #4 0x804926b in _start () (gdb) Now i find the code for each line: frame 2: log("Entering game loop."); game_loop(mother_desc); <----line 244 log("Closing all sockets."); while (descriptor_list) close_socket(descriptor_list); Frame 3: if (scheck) { boot_world(); log("Done."); exit(0); } else { sprintf(buf, "Running game on port %d.", port); log(buf); init_game(port); <---Line 214 } return 0; } haven't done a thing with game_loop or init_game so i wouldn't see the problem there. Another thing that boggels me is why it crashes w/o gdb but with gdb it works fine? Whew, if you get this far thanks for reading this much...I wouldn't normally read a message this long:) -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- | Ryan Guthrie | | guthrie@henge.com | -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/08/00 PST