Stack traces in own program in cygwin

2007-08-01 Thread Bas Vodde


Hi,

I'm working on some unit testing framework and was thinking of building 
in some functionality for stack traces. I checked what functionality is 
available and found glibc contains execinfo.h with backtrace which can 
be used (for linux).


For Windows, I use gcc and cygwin. I cannot find the execlib.h in cygwin 
at all, so I'll need to find a different way. In Windows I can probably 
use the MS dbghelp.dll, but that would create a dependency on Win SDK, 
which I prefer not having.


Does anyone have any idea about this, or is (or will) execinfo.h be 
available? Any other way of doing it without Win SDK?


Tnx

Bas Vodde

--
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/



Re: Stack traces in own program in cygwin

2007-08-01 Thread Bas Vodde


Hi Brian,

Thanks for the reply. Where can I find the cygwin code that unwinds the 
stack? I might have a look at it anyway :)


The problem I have with dbghelp is not whether the DLL is available, but 
whether the WinSDK is... It would require a header file (which is 
possible to fake) and a .lib. I'm not sure how to call the dbghelp calls 
without linking to the library. (though this should be possible, I just 
don't know how and where to find info about how to do it). If you for an 
idea about this, then that also could help me forward :)


Thanks!

Bas

Brian Dessent wrote:

Bas Vodde wrote:


I'm working on some unit testing framework and was thinking of building
in some functionality for stack traces. I checked what functionality is
available and found glibc contains execinfo.h with backtrace which can
be used (for linux).


Yes, that's glibc-specific functionality which is not applicable
elsewhere.


For Windows, I use gcc and cygwin. I cannot find the execlib.h in cygwin
at all, so I'll need to find a different way. In Windows I can probably
use the MS dbghelp.dll, but that would create a dependency on Win SDK,
which I prefer not having.


There is rudimentary code in Cygwin for trying to unwind the stack, but
it's only used in fatal error conditions such as when a SEGV fault
occurs and the foo.exe.stackdump file is written.  And this just shows
the raw memory addresses of the call chain, it does not attempt to
resolve them into symbolic functions, so it would be quite useless for a
user.

It is possible to write code that uses the dbghelp library that does not
need anything third party tools installed, as the library is included as
part of the operating system since Win2k.  However, the bundled version
may be quite old, so it might not have all the functionality of a newer
one.  See e.g. http://msdn2.microsoft.com/en-us/library/ms679294.aspx

You could also bundle a copy of gdb, and then attach-backtrace-detach,
but that's probably not the kind of answer you're looking for.

Brian

--
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/



--
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/