<!-- MHonArc v2.4.4 -->
<!--X-Subject: [MUD-Dev] Re: Technical C/C++ coding question -->
<!--X-From-R13: Tvaa Oear Unatfgnq <svaantNthneqvna.ab> -->
<!--X-Date: Sat, 25 Jul 1998 00:29:29 -0700 -->
<!--X-Message-Id: Pine.LNX.3.95.980725091129.20744A-100000#lucifer,guardian.no -->
<!--X-Content-Type: text/plain -->
<!--X-Reference: Pine.LNX.3.96.980613223516.31300A-100000#shamen,cyberhighway.net -->
<!--X-Head-End-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>MUD-Dev message, [MUD-Dev] Re: Technical C/C++ coding question</title>
<!-- meta name="robots" content="noindex,nofollow" -->
<link rev="made" href="mailto:finnag#guardian,no">
</head>
<body background="/backgrounds/paperback.gif" bgcolor="#ffffff"
text="#000000" link="#0000FF" alink="#FF0000" vlink="#006000">
<font size="+4" color="#804040">
<strong><em>MUD-Dev<br>mailing list archive</em></strong>
</font>
<br>
[ <a href="../">Other Periods</a>
| <a href="../../">Other mailing lists</a>
| <a href="/search.php3">Search</a>
]
<br clear=all><hr>
<!--X-Body-Begin-->
<!--X-User-Header-->
<!--X-User-Header-End-->
<!--X-TopPNI-->
Date:
[ <a href="msg00351.html">Previous</a>
| <a href="msg00353.html">Next</a>
]
Thread:
[ <a href="msg00759.html">Previous</a>
| <a href="msg00348.html">Next</a>
]
Index:
[ <A HREF="author.html#00352">Author</A>
| <A HREF="#00352">Date</A>
| <A HREF="thread.html#00352">Thread</A>
]
<!--X-TopPNI-End-->
<!--X-MsgBody-->
<!--X-Subject-Header-Begin-->
<H1>[MUD-Dev] Re: Technical C/C++ coding question</H1>
<HR>
<!--X-Subject-Header-End-->
<!--X-Head-of-Message-->
<UL>
<LI><em>To</em>: mud-dev <<A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A>></LI>
<LI><em>Subject</em>: [MUD-Dev] Re: Technical C/C++ coding question</LI>
<LI><em>From</em>: Finn Arne Gangstad <<A HREF="mailto:finnag#guardian,no">finnag#guardian,no</A>></LI>
<LI><em>Date</em>: Sat, 25 Jul 1998 09:27:07 +0200 (MET DST)</LI>
<LI><em>cc</em>: Charlie Ponder <<A HREF="mailto:cponder#tripod,net">cponder#tripod,net</A>></LI>
<LI><em>Reply-To</em>: <A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A></LI>
</UL>
<!--X-Head-of-Message-End-->
<!--X-Head-Body-Sep-Begin-->
<HR>
<!--X-Head-Body-Sep-End-->
<!--X-Body-of-Message-->
<PRE>
On Sat, 13 Jun 1998, Ben Greear wrote:
>
> Java has this nice feature called printStackTrace(), that allows
> you to get a stack trace (and log it or whatever) during runtime.
Sorry to answer so late, but here are some functions i made for the
mud I'm working on to do what you want.
stack_trace requires gcc, and will only print a stack-trace containing the
addresses (use gdb or similar to look them up).
const char *
stack_trace()
{
#ifdef __GNUC__
static char trace_buf[400];
char *t = trace_buf;
int m = 1;
char *p = 0;
/* The general idea here is that you're not interested in call-trace
* that goes up above main() */
const unsigned int delta = size_of_main;
/* Don't look */
*t++ = '(';
m = m && (p = __builtin_return_address(1)) && (t += sprintf(t, "%p", p)) &&
(p - (char *)main) > delta;
m = m && (p = __builtin_return_address(2)) && (t += sprintf(t, " %p", p)) &&
(p - (char *)main) > delta;
m = m && (p = __builtin_return_address(3)) && (t += sprintf(t, " %p", p)) &&
(p - (char *)main) > delta;
/* .... etc as long as you bother (i did it up to 29, if you extend it
* increase the size of trace_buf */
*t++ = ')';
*t++ = 0;
return trace_buf;
#else
return "(no stack-trace using this compiler)";
#endif
}
To initialise the global variable "size_of_main", do this in main():
int main(int argc, char **argv)
{
/* ... */
size_of_main = (char *)&&main_end - (char *)main;
/* ... */
main_end:
exit(0);
}
> Is there a way to (easily) do that in c++ as well? Can I make it
> dump a core file and yet still keep runing?
And here is a function to fork and dump core:
void
fork_and_dump_core(const char *why)
{
pid_t pid;
fprintf(stderr, "DEBUG: fork_and_dump_core: %s", why);
fflush(NULL); /* flush all streams so fork doesn't mess things up */
pid = fork();
if (pid == -1) {
perror("fork_and_dump_core: fork failed");
} else if (pid == 0) {
volatile int n = 0;
n = 1 / n; /* die horribly */
_exit(0);
} else {
waitpid(pid, 0, 0); /* wait for the core dump.. usefulness questioned */
}
}
The reason for using "1 / n" (where n is 0) to die instead of abort(), is
that abort() didn't include the last function in the call-trace on the OS
i tested it on.
- Finn Arne
</PRE>
<!--X-Body-of-Message-End-->
<!--X-MsgBody-End-->
<!--X-Follow-Ups-->
<HR>
<!--X-Follow-Ups-End-->
<!--X-References-->
<!--X-References-End-->
<!--X-BotPNI-->
<UL>
<LI>Prev by Date:
<STRONG><A HREF="msg00351.html">[MUD-Dev] Re: WIRED: Kilers have more fun</A></STRONG>
</LI>
<LI>Next by Date:
<STRONG><A HREF="msg00353.html">[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</A></STRONG>
</LI>
<LI>Prev by thread:
<STRONG><A HREF="msg00759.html">[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</A></STRONG>
</LI>
<LI>Next by thread:
<STRONG><A HREF="msg00348.html">[MUD-Dev] Fun vs Realism [ Was: OT: Sid Meier ]</A></STRONG>
</LI>
<LI>Index(es):
<UL>
<LI><A HREF="index.html#00352"><STRONG>Date</STRONG></A></LI>
<LI><A HREF="thread.html#00352"><STRONG>Thread</STRONG></A></LI>
</UL>
</LI>
</UL>
<!--X-BotPNI-End-->
<!--X-User-Footer-->
<!--X-User-Footer-End-->
<ul><li>Thread context:
<BLOCKQUOTE><UL>
<LI><STRONG>[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</STRONG>, <EM>(continued)</EM>
<ul compact>
<LI><strong><A NAME="00410" HREF="msg00410.html">[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</A></strong>,
Damion Schubert <a href="mailto:zjiria#texas,net">zjiria#texas,net</a>, Wed 29 Jul 1998, 03:06 GMT
</LI>
<LI><strong><A NAME="00431" HREF="msg00431.html">[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</A></strong>,
Koster, Raph <a href="mailto:rkoster#origin,ea.com">rkoster#origin,ea.com</a>, Thu 30 Jul 1998, 14:37 GMT
<UL>
<LI><strong><A NAME="00450" HREF="msg00450.html">[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</A></strong>,
Brandon J. Rickman <a href="mailto:ashes#pc4,zennet.com">ashes#pc4,zennet.com</a>, Sat 01 Aug 1998, 23:27 GMT
</LI>
</UL>
</LI>
<LI><strong><A NAME="00759" HREF="msg00759.html">[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</A></strong>,
Damion Schubert <a href="mailto:zjiria#texas,net">zjiria#texas,net</a>, Tue 18 Aug 1998, 04:48 GMT
</LI>
</ul>
</LI>
<LI><strong><A NAME="00352" HREF="msg00352.html">[MUD-Dev] Re: Technical C/C++ coding question</A></strong>,
Finn Arne Gangstad <a href="mailto:finnag#guardian,no">finnag#guardian,no</a>, Sat 25 Jul 1998, 07:29 GMT
<LI><strong><A NAME="00348" HREF="msg00348.html">[MUD-Dev] Fun vs Realism [ Was: OT: Sid Meier ]</A></strong>,
Leach, Brad BA <a href="mailto:Leach.Brad.BA#bhp,com.au">Leach.Brad.BA#bhp,com.au</a>, Sat 25 Jul 1998, 04:50 GMT
<UL>
<LI><strong><A NAME="00350" HREF="msg00350.html">[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</A></strong>,
Caliban Tiresias Darklock <a href="mailto:caliban#darklock,com">caliban#darklock,com</a>, Sat 25 Jul 1998, 05:47 GMT
<UL>
<LI><strong><A NAME="00353" HREF="msg00353.html">[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</A></strong>,
Nathan F Yospe <a href="mailto:yospe#hawaii,edu">yospe#hawaii,edu</a>, Sat 25 Jul 1998, 09:09 GMT
<UL>
<LI><strong><A NAME="00355" HREF="msg00355.html">[MUD-Dev] Re: Fun vs Realism [ Was: OT: Sid Meier ]</A></strong>,
Caliban Tiresias Darklock <a href="mailto:caliban#darklock,com">caliban#darklock,com</a>, Sat 25 Jul 1998, 09:54 GMT
</LI>
</UL>
</LI>
</UL>
</LI>
</UL>
</LI>
</UL></BLOCKQUOTE>
</ul>
<hr>
<center>
[ <a href="../">Other Periods</a>
| <a href="../../">Other mailing lists</a>
| <a href="/search.php3">Search</a>
]
</center>
<hr>
</body>
</html>