Display lines number in Stack Trace for .NET assembly in Release mode

94,582

Solution 1

  • Go into the Properties window for the project where you want to see stack trace line numbers.
  • Click on the Build "vertical tab".
  • Select "Release" configuration. Check the DEBUG constant parameter.
  • Uncheck the "Optimize code" parameter to avoid the occasional trace issue with inlined code (this step is not essential).
  • Press the Advanced... button and choose Output -> Debug Info -> pdb-only.
  • Deploy the generated .pdb file with the assembly.

Implemented with the comment below:

  • One other thing to check is in the "Package/Publish Web" section that the "Exclude generated debug symbols" checkbox is also unchecked

Solution 2

In VS2012 you need to uncheck "Exclude generated debug symbols" in the Package/Publish Web section of the properties as well.

Solution 3

My solution

Copy pdb file in same folder that executable file.

now i can view the line number when run the exe file.

this is reason

http://msdn.microsoft.com/en-us/library/ee416588%28v=vs.85%29.aspx

Solution 4

I've run into problems in the past where I feel the need to deploy PDB files with a release build in order to track down an error. The reason is, like you said, was that the exception occurred in a method that was very large and I could not accurately pinpoint where it was happening.

This might be an indication that the method needs to be refactored into smaller, more granular methods. Not a one size fits all answer, but this approach has served me well in the short term (I've often found the bug during the refactoring) and in the long run.

Just a thought.

Solution 5

Include debug symbols with your build/deployment package.

Share:
94,582

Related videos on Youtube

Michael Kniskern
Author by

Michael Kniskern

I am currently working as an IT engineer for the government of Mesa, Arizona USA

Updated on July 08, 2022

Comments

  • Michael Kniskern
    Michael Kniskern almost 2 years

    Is there a way to display the lines in the stack trace for the .NET assembly build/deployed in Release mode?

    UPDATE:

    My application is divided into three class library projects and one ASP.NET "website" project. The error I am trying to track down is in one of the three class library projects. I only deployed the pdb file for the class library project that is generating the "Object reference not set to an instance of an object" error.

    The line numbers are still not showing up in the stack trace. Do I need to deploy the pdb files for all projects to get the line numbers in the stack trace?

    Working solution

    Deploying the pdb file for each application fixed the line number issue.

  • Michael Kniskern
    Michael Kniskern about 15 years
    Do I have to deploy the pdb file along with the assembly?
  • John Saunders
    John Saunders about 15 years
    Yes. That's where the debug symbols and line numbers are at.
  • jamil ahmed
    jamil ahmed about 15 years
    You probably don't want to expose this information if you don't have to. Use it to debug a clients problem, yes. But you don't always want to do it because debugging information can give away sensitive data and be an attack vector. Depending on what your app is.
  • Jonathan Parker
    Jonathan Parker about 15 years
    Is there any way to do this when installing dlls in the GAC?
  • Carlo
    Carlo about 14 years
    @coxymla: I tried getting the method name, file name and line number without unchecking "optimize code", and without changing the Debug Info (it was in "full" by default). Do you know why it still works?
  • Coxy
    Coxy about 14 years
    @Carlo - not 100% sure from what you've posted. You do or you don't get line numbers? Anyway, I recommend asking a new question for your particular situation.
  • Suma
    Suma about 14 years
    @Carlo: Debug information works with release (optimized) code as well, however debugging is somewhat limited (stackoverflow.com/questions/113866). However callstacks are quite reliable even in optimized code, with exception of inlined functions and ocasional situations where tail call can be missing because call xxx / ret sequence was replaced with jmp xxx.
  • jwg
    jwg over 11 years
    @Carlo, it should work with Debug Info = "full", too. It just wouldn't work with it set to "none", I think this is why the answer said to change it to "pdb-only".
  • Gaz
    Gaz about 10 years
    One other thing to check is in the "Package/Publish Web" section that the "Exclude generated debug symbols" checkbox is also unchecked
  • Gerard ONeill
    Gerard ONeill over 8 years
    This. And as you go, throw try catches in more sketchy places at a finer grain. And increase the guards at the beginning of these functions if assumptions have to be made.
  • jumxozizi
    jumxozizi over 7 years
    What did you find? You could post a comment if you don't want to post a complete answer.
  • FastAl
    FastAl over 7 years
    @i_am_jorf Can you give a reference to any substantial security info that can leak via pdb-only debug? I've heard this is a myth and I've never seen an example (aside from inserting path/server names but these are easy to make meaningless via mapped drives, etc).
  • FastAl
    FastAl over 7 years
    Often said and so true, however, there is legacy, there are programmers writing new large methods, and sometimes a large method is actually the best thing to do (splitting it is confusing or YAGNI). Plus, even for a 5 line method - you narrow your search 5x - so PDBs are a needed evil in production unless you take the pain of using a symbol server
  • CAD bloke
    CAD bloke almost 6 years
    or if it is a desktop app, make sure the PDB file is deployed