On Tue, 16 Oct 2012 17:52:38 +0100, Benjamin Thaut
c...@benjamin-thaut.de wrote:
Am 16.10.2012 18:38, schrieb Regan Heath: I have some C/C++ code which
handles windows SEH exceptions and can
output (in debug mode) a stack trace, for example:
But, it doesn't output symbol names for the D functions. Does anyone
know why not? Is there some reason it cannot? Perhaps the debug
information in the binary is incomplete.. IIRC that was an issue in
the
past and may still be.
I managed to wind my way through the code and find the stacktrace.d
module with the StackTrace class which appears to be producing the
stack
trace. Comparing it to my own, the major difference is on the
StackWalk
call I pass FunctionTableAccessRoutine and GetModuleBaseRoutine
routines
(3rd and 2nd to last parameters) .. I'm guessing there is some reason
this wont work in D, can anyone enlighten me?
R
You could use cv2pdb to convert the debugging symbols into the pdb
format, then the stackwaler will always be able to resolve the stack.
So, the problem in my case is that dbghelp.dll doesn't understand the DMD
CodeView (CV) debug information?
Ahh.. I think I've figured out where I've been going wrong. It's been a
while since I worked with any D and I was not passing the -g or -gc
compile flags, only -debug, duh!
I figured this out when cv2pdb complained .. no codeview debug entries
found
But, now I cannot compile.. (DMD32 D Compiler v2.060)
C:\dmd -g -debug crash.d
OPTLINK (R) for Win32 Release 8.00.12
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
OPTLINK : Error 118: Filename Expected
Path=..etc..
Adding -v shows a linker command of:
C:\Development\D\dmd2\windows\bin\link.exe
crash,,nul,user32+kernel32/co/noi;
The input file crash.obj is present, and a quick test removing the /co
(debug information)
C:\Development\D\dmd2\windows\bin\link.exe
crash,,nul,user32+kernel32/co/noi;
works fine.. any ideas where this is going wrong?
Depending on your version of the dbghelp.dll, which comes with the
windows sdk, or visual studio, it will also correctlry resolve cv
smybols. I have windows 7 64 bit service pack 1 with visual studio 2010
installed and the D stacktracking correctly resolves cv symbols for me.
Interesting. I searched and found 13 different versions of dbghelp.dll
installed on my system. I have windows 7 64 bit SP1 with VS2010 installed
and it's not working for me. I suspect in my case it's using one of the
other 12 dlls.
In my VS2010 folder(s) I found 3 dbghelp.dll's all version 6.12.2.633,
does that match yours?
In c:\Windows\System32 SysWOW64 and the winsxs folders the version is
6.1.7601.17514, which looks older but has a newer date on it.
I also found version 6.1.7600.16385 in the winsxs folders.
R
--
Using Opera's revolutionary email client: http://www.opera.com/mail/