views:

1048

answers:

4

We are currently distributing a WinForms app without .pdb files to conserve space on client machines and download bandwidth. When we get stack traces, we are getting method names but not line numbers. Is there any way to get the line numbers without resorting to distributing the .pdb files?

+6  A: 

No. The line numbers are part of the debugging information, which is only stored in the PDB file. That is the reason PDB files exist in the first place.

Reed Copsey
You don't have to ship the PDB file to *have* the PDB file. As long as you stash it away somewhere when you build, you can refer to it when you get the stack trace. See http://stackoverflow.com/questions/1328836/include-line-numbers-in-stack-trace-without-pdb/1328915#1328915
tghw
Yes, that's true. But you have to have the PDB file to get this information - since that's where it's stored by the compiler.
Reed Copsey
A: 

No there is not. All of the information necessary to map lines of IL to the original source file and line number are stored within the PDB. It's not possible to get that information in the stack trace without the PDB.

JaredPar
+1  A: 

Not the appropriate answer to your question but i have a suggestion. You could incorporate a logging mechanism and get these log files alongside the stack traces. If you include line numbers in your log messages, you can combine the logging information with your stack trace manually.

If you don't want to take up much space you can use limited size log files, this way only the most recent log messages will be kept.

We use log4net library for our logging needs, I recommend you take a look.

erelender
+13  A: 

You can't get a stack trace with line numbers directly from your application unless you bundle the PDB. However, if you have the PDB files for the same version of the app that you ship to your customers, and you don't mind some light scripting, then you can turn the .NET stack trace and IL offsets back into line numbers.

During your build process, use Mike Stall's pdb2xml converter, distributed as part of his excellent MDbg managed code debugger, and store them some place secure (e.g., source control). When you get a stack trace back from the client, you can query the IL offset from the XML data to determine the relevant line number. If your stack traces get submitted to a website, you can even automate the conversion, so that developers will already be getting fully detailed stack traces by the time the cases hit their inbox.

Benjamin Pollack
Could you or anyone else put Pdb2Xml.exe somewhere on the net? I guess it's also usable for unmanaged code, and i dont have a c# compiler. But i only find the sources. Seems to be a great tool.
RED SOFT ADAIR