Wyświetl liczbę wierszy w śledzeniu stosu dla zespołu .NET w trybie wydania


139

Czy istnieje sposób wyświetlania wierszy w śladzie stosu dla kompilacji / wdrożenia zestawu .NET w trybie wydania?

AKTUALIZACJA:

Moja aplikacja jest podzielona na trzy projekty bibliotek klas i jeden projekt „strony internetowej” ASP.NET. Błąd, który próbuję wyśledzić, występuje w jednym z trzech projektów bibliotek klas. Wdrożyłem plik pdb tylko dla projektu biblioteki klas, który generuje błąd „Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu”.

Numery wierszy nadal nie pojawiają się w śladzie stosu. Czy muszę wdrożyć pliki pdb dla wszystkich projektów, aby uzyskać numery wierszy w śladzie stosu?

Rozwiązanie robocze

Wdrożenie pliku pdb dla każdej aplikacji rozwiązało problem z numerem linii.

Odpowiedzi:


147
  • Przejdź do okna Właściwości projektu, w którym chcesz zobaczyć numery linii śledzenia stosu.
  • Kliknij „pionową kartę” Kompilacja.
  • Wybierz konfigurację „Zwolnij”. Sprawdź parametr stałej DEBUG.
  • Usuń zaznaczenie parametru „Optymalizuj kod”, aby uniknąć sporadycznych problemów ze śledzeniem z kodem wbudowanym (ten krok nie jest konieczny).
  • Naciśnij przycisk Zaawansowane ... i wybierz Wyjście -> Informacje o debugowaniu -> Tylko pdb.
  • Wdróż wygenerowany plik .pdb z zestawem.

Zaimplementowano z poniższym komentarzem:

  • Jeszcze jedna rzecz, którą należy sprawdzić, to w sekcji „Pakowanie / publikowanie w sieci Web”, że pole wyboru „Wyklucz wygenerowane symbole debugowania” również nie jest zaznaczone

2
Czy muszę wdrożyć plik pdb wraz z zestawem?
Michael Kniskern

7
Tak. Tam znajdują się symbole debugowania i numery wierszy.
John Saunders

5
Prawdopodobnie nie chcesz ujawniać tych informacji, jeśli nie musisz. Użyj go do debugowania problemu klienta, tak. Ale nie zawsze chcesz to robić, ponieważ debugowanie informacji może ujawnić poufne dane i stać się wektorem ataku. W zależności od tego, jaka jest Twoja aplikacja.
i_am_jorf

6
@Carlo: informacje debugowania działają również z kodem wydania (zoptymalizowanym), jednak debugowanie jest nieco ograniczone ( stackoverflow.com/questions/113866 ). Jednak stosy wywołań są całkiem niezawodne nawet w zoptymalizowanym kodzie, z wyjątkiem wbudowanych funkcji i sporadycznych sytuacji, w których może brakować wywołania końcowego, ponieważ sekwencja wywołania xxx / ret została zastąpiona przez jmp xxx.
Suma

12
Jeszcze jedna rzecz, którą należy sprawdzić, to w sekcji „Pakowanie / publikowanie w sieci WWW”, że pole wyboru „Wyklucz wygenerowane symbole debugowania” również nie jest zaznaczone
Gaz

17

W VS2012 należy również odznaczyć opcję „Wyklucz wygenerowane symbole debugowania” w sekcji Spakuj / Opublikuj w sieci Web we właściwościach.


lub jeśli jest to aplikacja komputerowa, upewnij się, że plik PDB został wdrożony
CAD bloke


9

W przeszłości napotkałem problemy, w których czułem potrzebę wdrożenia plików PDB z kompilacją wydania, aby wyśledzić błąd. Powód jest taki, jak powiedziałeś, że wyjątek wystąpił w metodzie, która była bardzo duża i nie mogłem dokładnie określić, gdzie to się dzieje.

Może to wskazywać, że metodę należy przełożyć na mniejsze, bardziej szczegółowe metody. Nie ma jednej odpowiedzi dla wszystkich, ale takie podejście dobrze mi służyło w krótkim okresie (często znajdowałem błąd podczas refaktoryzacji) i na dłuższą metę.

Tylko myśl.


To. A gdy idziesz, rzucaj próbnymi chwytami w bardziej szkicowych miejscach z drobniejszym ziarnem. I zwiększ osłony na początku tych funkcji, jeśli trzeba przyjąć założenia.
Gerard ONeill

Często mówi się i jest to prawda, jednak istnieje spuścizna, są programiści piszący nowe duże metody, a czasami duża metoda jest właściwie najlepszą rzeczą do zrobienia (dzielenie jej jest mylące lub YAGNI). Dodatkowo, nawet w przypadku metody 5-liniowej - zawężasz wyszukiwanie 5x - więc PDB są złem potrzebnym w produkcji, chyba że
zniesiesz


0

W VS 2008 Express znalazłem go w sekcji Właściwości projektu -> Kompiluj -> Zaawansowane opcje kompilacji.


1
Co znalazłeś? Możesz opublikować komentarz, jeśli nie chcesz publikować pełnej odpowiedzi.
jumxozizi

-4

To działa za każdym razem. Wystarczy podciągnąć komunikat śledzenia stosu. Naprawdę proste! Ponadto w vb.net musisz zrobić "Pokaż wszystkie pliki" i dołączyć pdb.

'Err is the exception passed to this function

Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5)
Dim i As Integer = 0
While i < lineGrab.Length                   
    If (IsNumeric(lineGrab(i))) Then
        lineNo.Append(lineGrab(i))
    End If
    i += 1
End While

'LineNo holds the number as a string

Wersja C #:

string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5);

int i = 0;
int value;
while (i < lineGrab.Length)
{
    if (int.TryParse(lineGrab[i].ToString(), out value))
    {
        strLineNo.Append(lineGrab[i]);
    }
    i++;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.