[gecode-users] pdb files

Christian Schulte cschulte at kth.se
Fri Sep 21 16:19:46 CEST 2007


Interesting,

as I am myself developing Gecode on Windows with cygwin and MSVC (same
version) I can reassure you that enable-debug does work. Also, you just add
the variables once to your .bashrc file. Or, if you are really lazy: start
bash and run vcvars.bat in it. That's it.

As it comes to shipping the pdb files, I think that's a good idea. Will do
for Gecode 2.0.0.

BTW: We intend to release 31. October 2007. The system is ready apart from
minor cleanups and major platform fiddling (on different platform we have
different issues). If you are curious, you can already get it from svn.

Christian

--
Christian Schulte, http://www.imit.kth.se/~schulte/ 

-----Original Message-----
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Filip Konvicka
Sent: Friday, September 21, 2007 3:24 PM
To: Guido Tack
Cc: users at gecode.org
Subject: Re: [gecode-users] pdb files


Guido Tack (21.9.2007 7:55):
> Filip Konvička wrote:
>>  Is there a
>> recommended way of obtaining the pdb files? I think that it's 
>> necessary to pass "/DEBUG /PDB:"GecodeKernel.pdb" to link.exe for the 
>> release build. (This IMHO does not change the dll files themselves, 
>> it just creates appropriate pdbs and thus enables debugging.)
>
> You can configure Gecode using
>
> ./configure --enable-debug CC=cl CXX=cl
>
> (and any other options you want).  Then build it (as detailed in the
> documentation).  This will create the pdb files.

Hm, not exactly what I want. To give you the whole funny story, I'll 
start at the beginning :-) First, I installed cygwin, then added the 
things that configure complained about. I'm using MSVC 8, so I executed 
the following:

export PATH=/cygdrive/c/Program\ Files/Microsoft\ Visual\ Studio\ 
8/Common7/IDE:/cygdrive/c/Program\ Files/Microsoft\ Visual\ Studio\ 
8/VC/BIN:/cygdrive/c/Program\ Files/Microsoft\ Visual\ Studio\ 
8/Common7/Tools:/cygdrive/c/Program\ Files/Microsoft\ Visual\ Studio\ 
8/Common7/Tools/bin:/cygdrive/c/Program\ Files/Microsoft\ Visual\ 
Studio\ 8/VC/PlatformSDK/bin:/cygdrive/c/Program\ Files/Microsoft\ 
Visual\ Studio\ 8/SDK/v2.0/bin:/cygdrive/c/Program\ Files/Microsoft\ 
Visual\ Studio\ 8/VC/VCPackages:$PATH
export INCLUDE='C:\Program Files\Microsoft Visual Studio 
8\VC\ATLMFC\INCLUDE;C:\Program Files\Microsoft Visual Studio 
8\VC\INCLUDE;C:\Program Files\Microsoft Visual Studio 
8\VC\PlatformSDK\include;C:\Program Files\Microsoft Visual Studio 
8\SDK\v2.0\include'
export LIB='C:\Program Files\Microsoft Visual Studio 
8\VC\ATLMFC\LIB;C:\Program Files\Microsoft Visual Studio 
8\VC\LIB;C:\Program Files\Microsoft Visual Studio 
8\VC\PlatformSDK\lib;C:\Program Files\Microsoft Visual Studio 
8\SDK\v2.0\lib'
export LIBPATH=

which is probably worth mentioning in the docs, as everybody probably 
needs this and it is tiresome to reinvent (all of this comes from 
vcvars32.bat somewhere in VC8 dirs). Anyway, configure went fine, so I 
ran "make". I think I had to install "diff" and "make", which configure 
did not check, and then make started complaining about missing perl. So 
I installed that, but this time things got a bit worse, since compile 
failed in gecode/int/int-set.cc (I think), complaining that (at 
gecode\int\var.icc line 40) "IntVarImpBase" was not a base class. I 
found out, after a while, that the defining include file 
"gecode\int\var\imp-hdr.icc" was empty, probably cause of the previous 
perl absence (which created it, zero-size, and failed, so subsequent 
make attempts did not bother to re-create the file). The problem is that 
the generated icc files are not deleted by "make veryclean".

OK, then I finally succeeded compiling everything with "configure CC=cl 
CXX=cl", so I tried --enable-debug, which does not work:

cl -nologo -EHsc -Zi -LDd MDd gecode/kernel/exception.obj 
gecode/kernel/core.obj gecode/kernel/memory-manager.obj \
                -FeGecodeKernel.dll
cl : Command line warning D9024 : unrecognized source file type 'MDd', 
object file assumed
LINK : fatal error LNK1181: cannot open input file 'MDd.obj'

Clearly, it tries to pass "MDd" instead of "/MDd" to cl.exe. Never mind, 
this is not what I want anyway, as it uses "-Zi -LDd" instead of "-Ox". 
In other words, I wanted to generate release-mode dlls and the 
corresponding pdb files (so that I have full-performance gecode with 
external symbols that enable call-stack decryption).

After some research, I found out that the easiest way is to invoke

export LINK="/DEBUG /OPT:REF /OPT:ICF"

before running make. The generated dlls are essentially same as the 
distributed ones (only some header bits are changed to indicate that 
symbols exist somewhere, AFAICT), and I have a set of pdb files so that 
I can see the call stack while debugging my actors. If it's not too 
complicated, I suggest that you build and distribute the pdb files in an 
installer package - maybe as an optional download, it's a 1,4 MB 7-zip 
(one floppy, rememer? :-)). It makes debugging in MSVC much easier.

Cheers,
Filip


_______________________________________________
Gecode users mailing list
users at gecode.org https://www.gecode.org/mailman/listinfo/gecode-users





More information about the gecode-users mailing list