2009-02-25 46 views
8

Wiem, że PDB są generowane dla zarządzanych projektów w .NET, podając kompilatorowi argument/debug. Czy jest sposób na określenie tego w GUI VS (2005)?Jak wygenerować PDB dla projektów zarządzanych .net w trybie zwolnienia?

Jedynym sposobem mogę zmusić go do generowania PDBs w trybie zwolnienia dotąd jest ręcznie zmodyfikować plik .csproj i dodać:

<DebugSymbols>true</DebugSymbols> 
<DebugType>full</DebugType> 

w ustawieniach „uwolnienia”:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 

Kolejna rzecz: dowiedziałem się z MSDN here że możliwe wartości dla tagu DebugType są:

  • full
  • pdbonly
  • none

Jak te wartości wpływają na zachowanie kompilator?

Odpowiedz

7

W VS2008 można ustawić właściwość za pomocą właściwości projektu -> Build -> Zaawansowane ... -> Informacje o debugowaniu.

+0

Nice! Potwierdziłem, że działa również w VS 2005. Wpatrywałam się w ustawienia "Kompilacji" milion razy, ale nigdy nie zauważyłam przycisku "Zaawansowane". Dzięki! –

+0

W VS 2008 (i może 2005) tylko pdb jest domyślnym kompilatorem wydania (i pełnym do debugowania). – Richard

4

Znalazłem this MONO request, które może rzucić trochę światła na to, jaka jest różnica między "full" i "pdbonly".

CSC ma „pdbonly” debugtype że generuje pdbs, podczas wytwarzania kodu wykonawczego, tzn zoptymalizowane, właściwości nie debugera itp

Ma to znaczenie dla możliwości otrzymania użytecznych ślady stosu od kodu jakości wydania.

Wydaje mi się, że istnienie 2 znaczników (DebugSymbols i DebugType) jest zbędne.

+2

"uzyskanie użytecznych śladów stosu" To jest błędne. Zawsze otrzymasz przydatne ślady stosu w kodzie .NET ze względu na obecność metadanych typu. Pakiety PDB o zapachu wydania są ważne dla pojedynczego przejścia przez kod produkcyjny, ale możesz uzyskać błędy w debugerze z powodu optymalizacji. –

+0

@ Daniel Bullington, Nie otrzymujesz numerów wierszy ani nazw plików bez plików pdb, co powoduje, że stos jest przynajmniej "mniej użyteczny" – tster

+0

@tster tak Zgadzam się, ale nawet bez PDB (a więc numerów linii/nazw plików), ślady stosu są nadal w mniejszym stopniu użyteczne :) –

6

w debugowania:

<DebugSymbols>true</DebugSymbols> 
<DebugType>full</DebugType> 
<Optimize>false</Optimize> 

W wydaniu:

<DebugSymbols>true</DebugSymbols> 
<DebugType>pdbonly</DebugType> 
<Optimize>true</Optimize>