incubator-nmaven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Carpenter (JIRA)" <>
Subject [jira] Created: (NMAVEN-213) Symbol and Source Server support to better integrate with Visual Studio and other MS debugging tools
Date Tue, 23 Sep 2008 19:45:45 GMT
Symbol and Source Server support to better integrate with Visual Studio and other MS debugging

                 Key: NMAVEN-213
             Project: NMaven
          Issue Type: New Feature
          Components: Visual Studio Integration
    Affects Versions: Future
            Reporter: James Carpenter

The contents of a post I (James Carpenter) submitted to the nmaven-dev mailing list with a
subject of  "Research into Symbol and Source Servers" provides a bit of background on this
issue.  For your convenience I have copied the text of my post below.


I have been doing some reading/research to better understand symbol servers and source servers.
 I realize some readers may already be familiar with the topic, but for those that are not
the information may prove useful.

To provide the ability to easily step down into source code of referenced libraries within
Visual Studio, NMaven will need to integrate with Microsoft's Source and Symbol server functionality.

A high level overview can be found using the following links:

Additional Useful Information:

The source server directory in the "Debugging Tools for Windows" distribution contains a particularly
useful MS Word document which provides a great deal of the details missing from the articles
above.  The section on "HTTP Sites and UNC Shares" is particularly interesting as it provides
an alternate way to easily support source server functionality.  Assuming you have installed
"Debugging Tools for Windows" in the standard location the MS Word document can be found at:

C:\Program Files\Debugging Tools for Windows (x86)\srcsrv\srcsrv.doc

Note: You will need to install "Debugging Tools for Windows".

The MS Help files installed along with "Debugging Tools for Windows" as well as most other
documentation don't really cover the use of multiple symbol servers well.  The omission can
lead one to the false conclusion only a single remote symbol server is supported.  From Chapter
4 (Managing Symbol and Source Files) of Advanced Windows Debugging by Daniel Pravat reveals
one can include as many remote symbol servers in the sympath as desired.  These can also be
URLs not just UNC paths.  (I may have found this in the MS Word document mentioned above.)

Title: Advanced Windows Debugging
by: Mario Hewardt; Daniel Pravat
Publisher: Addison Wesley Professional
Pub Date: October 29, 2007
Print ISBN-10: 0-321-37446-0
Print ISBN-13: 978-0-321-37446-2
(Available on Safari.)

When you store a pdb in the symbol server

e.g.: prompt>symstore add /r /f C:\junk2\bin\*.* /s C:\symbolstore\ /t "MyApp" /v "Build

the symstore will create a directory structure which contains a GUID extracted from the PDB.
As it turns out a PDB is given a GUID when it is created.  One way to read the GUID is to
use the dbh tool.

e.g.: C:\junk2\bin>dbh -v srvind MySymbol.pdb

Details on the dbh tool can be found in the MS Help files shipped with the "Debugging Tools
for Windows".

Note: Examples assume C:\Program Files\Debugging Tools for Windows (x86) is on your path.

Supporting Symbol/Source Servers in NMaven

To properly support symbol and source server functionality in nmaven there appear to be two
good choices I can see.  These are:

Option 1:

a) Create a plugin(s) which downloads the pdb files of every dependency (saved in the mvn
repo as attached artifacts) and executes symstore to save the pdb files in a local symbol

b) Create a plugin(s) which downloads the source archives of every dependency (saved in the
mvn repo as attached artifacts) and expands them into a directory structure matching that
of a UNC store.  (See "HTTP Sites and UNC Shares" section of srcsrv.doc.)

c) Ensure the pdb files are properly processed to include the necessary source stream during
or before the deploy phase.  It is important SNAPSHOT artifacts include this information so
one can't wait for the release plugin to do the job.  

Option 2:

a) Same as Option 1.a

b) Process the pdb files during/before the deploy phase to include the information necessary
to extract a single source file.  Under the covers the command line call formed when VS processed
the source stream from the pdb file will need to resolve the relevant source archive and extract
the relevant file from the source archive.  The best way to do this is likely to work out
a one line mvn call which will return the relevant source file, creating a plugin or two as
necessary.  The command line call formed when processing the source stream in the pdb file
will therefore simply be a call into maven.


Careful examination of the perl scripts included in C:\Program Files\Debugging Tools for Windows
(x86)\srcsrv\ and documented in the associated MS Word document should be enough to understand
how the pdb processing works in both Option 1 and 2.

Effort Estimate:

Option 1 may be slightly easier to implement, but option 2 will probably be a tad more elegant.
 It wouldn't be that much more effort to support both.  I would guess either approach will
probably take a week or two of work to complete, including testing.

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:


View raw message