Dr. Stephen Henson wrote:
> That's most peculiar. I've tested 1.0.0-stable with Visual Studio Express
> 2008. I did the following simple test:
>
> Start openssl.exe
> Start VS express.
> Select tools->attach to process.
> Debug->Break All.
>
> I get a warning about deadlocked process but it is otherwise OK. I can set
> breakpoints and source code is displayed. This worked for debug shared and
> static builds.
>
> The non-debug builds didn't show any source and it said there were no symbols.
>   

This is working here, too. But...

I have some very different directories for OpenSSL source tree
(d:\proj.svn\common\openssl-1.0.0), plus for my project code
(d:\proj.svn\Training\ssl1\MrFtp) and finally for the installed OpenSSL
binaries (aka '--prefix', here it is: C:\tools\OpenSSL).

The crazy thing now comes (please kindly keep patience, the solution is
also coming at end of the mail):

I built OpenSSL 2 times.
The first one, with additional /Zi goes to => C:\TOOLS\OpenSSL,
The second one, with normal -Zi goes to => C:\temp\OpenSSL,
I tried your debug/attach test - it works even for
C:\temp\OpenSSL\bin\openssl.exe (no extra /Zi)
Then I changed my local project to use -I C:\temp\OpenSSL\include and
linker uses c:\temp\OpenSSL\lib.
Expecting to _not_ beeing able to jump into ERR_load_BIO_strings(), I am
surprised. It works now!
Next, I changed back -I C:\TOOLS\OpenSSL\include and linker uses
c:\TOOLS\OpenSSL\lib. This is, where I have my /Zi-extra-built installed.
Surprisingly, now _this_ version is not able to be debugged anymore!
Linker tells:

1>Generating Code...
1>Linking...
1>libeay32.lib(cryptlib.obj) : warning LNK4099: PDB 'out32.pdb' was not
found with 'c:\tools\openssl\lib\libeay32.lib' or at
'd:\proj.svn\Training\ssl1\debug\out32.pdb'; linking object as if no
debug info
1>libeay32.lib(mem.obj) : warning LNK4099: PDB 'out32.pdb' was not found
with 'c:\tools\openssl\lib\libeay32.lib' or at
'd:\proj.svn\Training\ssl1\debug\out32.pdb'; linking object as if no
debug info
1>libeay32.lib(mem_dbg.obj) : warning LNK4099: PDB 'out32.pdb' was not
found with 'c:\tools\openssl\lib\libeay32.lib' or at
'd:\proj.svn\Training\ssl1\debug\out32.pdb'; linking object as if no
debug info

The files out32.pdb / out32dll.pdb are still laying around in
d:\proj.svn\common\openssl-1.0.0.

Should this be the reason? wrong location of *.pdb files?
I copied them into c:\TOOLS\OpenSSL\lib and my projects
d:\proj.svn\Training\ssl1\debug folders.
No help - linker is complaining they are not referring to the *right*
library:

2>Generating Code...
2>Linking...
2>libeay32.lib(cryptlib.obj) : warning LNK4204:
'd:\proj.svn\Training\ssl1\debug\out32.pdb' is missing debugging
information for referencing module; linking object as if no debug info
2>libeay32.lib(mem.obj) : warning LNK4204:
'd:\proj.svn\Training\ssl1\debug\out32.pdb' is missing debugging
information for referencing module; linking object as if no debug info

If I understand this right, without the extra /Zi, the _location_ and
the _content_ of out32*.pdb files is very important.

To give the final proof, I again built the whole OpenSSL with my default
--prefix=c:\TOOLS\OpenSSL, but this time /without/ the extra /Zi. Then
again recompiled and started my training project ... now the debugging
again works.

_Conclusion_:
With standard build rules (configure, make, test, install) _without_ a
patched '\util\pl\VC-32.pl', VS2005 debugging _is_ working for both
"process attach" and "Run/Debug-in-single-Steps". But only if some more
prerequisites are kept in mind:
* source directory tree (where INSTALL.W32 resides) shall not be cleaned
or removed after successfully run of 'make install'
* this source directory must contain out32[dll].pdb
* out32[dll].pdb must be created together with the same make configure
.... make install call, which created your [prefix]\include and
[prefix]\lib directories and content
* your C project needs to include exactly the mentioned [prefix]\include
and [prefix]\lib components, because its path seems to be encoded in
out32[dll].pdb and vice versa.

_Conclusion_ II:
With standard build rules (configure, make, test, install) _plus_ a
patched '\util\pl\VC-32.pl' (added /Zi), VS2005 debugging _is_ working
for both "process attach" and "Run/Debug-in-single-Steps", without some
of the prerequisites mentioned above. The PDB files are neither in the
openssl directory nor in the [prefix] directory. But debuging works.

puh, long tests, long mail, short conclusions.
Hope this helps for somebody,

Modem Man

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [email protected]
Automated List Manager                           [email protected]

Reply via email to