This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Stackdump trace - problem and patch


I was having this difficulty debugging a crashed application.  I was using
Cygwin environmental variable error_start to either call dumper or gdb.
Both a core dump and invoking gdb didn't show anything relevant to
my application.  I tried various means of examining and setting the
registers in the stack to get to a frame that was within my app.  I have
read the various messages on the list describing how to get to those
frames.  It's rather tricky, and it availed me not.  Probably a personal
problem. ;-)

So I gave up on that, removed error_start and reran the app.  Well
the resulting stackdump file looked great.  That is to say it was a nice
clean stack that described a normal screwup on my part.  The only
problem with it was it only displays 16 entries.  Well I needed more
to pinpoint the problem because my app is pretty deeply nested.

Well I patched up my cygwin and recompiled to show me more.
I just added a tracesize option to the Cygwin environment variable.

Anyway here's what I done to it. It might be useful or might not.

--- environ.cc.orig 2005-01-01 03:15:33.913185600 -0500
+++ environ.cc 2005-01-01 03:16:55.670747200 -0500
@@ -34,6 +34,7 @@ extern bool allow_winsymlinks;
extern bool strip_title_path;
extern int pcheck_case;
extern int subauth_id;
+extern int tracesize;
bool reset_com = false;
static bool envcache = true;
#ifdef USE_SERVER
@@ -500,6 +501,12 @@ set_smbntsec (const char *buf)
allow_smbntsec = (buf && strcasematch (buf, "yes") && wincap.has_security ());
}


+static void
+set_tracesize (const char *buf)
+{
+  int tracesize = strtol (buf, NULL, 0);
+}
+
/* The structure below is used to set up an array which is used to
   parse the CYGWIN environment variable or, if enabled, options from
   the registry.  */
@@ -541,6 +548,7 @@ static struct parse_thing
  {"strip_title", {&strip_title_path}, justset, NULL, {{false}, {true}}},
  {"subauth_id", {func: &subauth_id_init}, isfunc, NULL, {{0}, {0}}},
  {"title", {&display_title}, justset, NULL, {{false}, {true}}},
+  {"tracesize", {func: set_tracesize}, isfunc, NULL, {{0}, {0}}},
  {"tty", {NULL}, set_process_state, NULL, {{0}, {PID_USETTY}}},
  {"winsymlinks", {&allow_winsymlinks}, justset, NULL, {{false}, {true}}},
  {NULL, {0}, justset, 0, {{0}, {0}}}

--- exceptions.cc.orig 2004-10-18 13:41:37.001000000 -0400
+++ exceptions.cc 2005-01-01 03:19:53.115900800 -0500
@@ -265,6 +265,8 @@ stack_info::walk ()
  return 1;
}

+int tracesize = 16;
+
static void
stackdump (DWORD ebp, int open_file, bool isexception)
{
@@ -280,7 +282,7 @@ stackdump (DWORD ebp, int open_file, boo

thestack.init (ebp, 1, !isexception); /* Initialize from the input CONTEXT */
small_printf ("Stack trace:\r\nFrame Function Args\r\n");
- for (i = 0; i < 16 && thestack++; i++)
+ for (i = 0; i < tracesize && thestack++; i++)
{
small_printf ("%08x %08x ", thestack.sf.AddrFrame.Offset,
thestack.sf.AddrPC.Offset);


--
Jon A. Lambert



--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]