W bloku catch
, w jaki sposób mogę uzyskać numer wiersza, który rzucił wyjątek?C# - pobierz numer linii, który wyrzucił wyjątek
Odpowiedz
Jeśli potrzebujesz numer wiersza dla więcej niż tylko sformatowany ślad stosu można uzyskać z Exception.StackTrace, można użyć klasy StackTrace:
try
{
throw new Exception();
}
catch (Exception ex)
{
// Get stack trace for the exception with source file information
var st = new StackTrace(ex, true);
// Get the top stack frame
var frame = st.GetFrame(0);
// Get the line number from the stack frame
var line = frame.GetFileLineNumber();
}
Zauważ, że to będzie działać tylko wtedy, gdy istnieje PDB plik dostępny dla zespołu.
? (Nowy StackTrace (ex, True)) GetFrame (0) .GetFileLineNumber() dla pojedynczej linii VB z bezpośredniego okna. – Jonathan
C# one liner: 'int line = (nowy StackTrace (ex, true)). GetFrame (0) .GetFileLineNumber();' – gunwin
To zawsze zwraca 0 dla mnie. Czy jest to spowodowane brakiem pliku pdb? Co to jest i jak to zdobyć? (Używam ASP.net) – Brabbeldas
Można dołączyć pliki symboli .PDB
powiązane ze złożeniem, które zawierają informacje o metadanych, a po zgłoszeniu wyjątku będą zawierały pełne informacje w stosie, w którym powstał ten wyjątek. Będzie zawierał numery linii każdej metody w stosie.
Prosty sposób, użyj funkcji Exception.ToString()
, zwróci wiersz po opisie wyjątku.
Możesz także sprawdzić programową bazę danych debugowania, ponieważ zawiera informacje/informacje dotyczące debugowania dotyczące całej aplikacji.
Cóż MSDN myśli inaczej, że "Tworzy i zwraca ciąg znaków reprezentujący bieżący wyjątek": http://msdn.microsoft.com/en-us/library/system.exception. tostring (v = vs.110) .aspx – Prokurors
Otrzymujesz coś podobnego do: 'System.Exception: Test w Tests.Controllers.HomeController.About() w c: \ Users \ MatthewB \ Documents \ Visual Studio 2013 \ Projects \ Tests \ Tests \ Controllers \ HomeController.cs: line 22' –
To powinna być zaakceptowana odpowiedź. Zawsze szukałem ex.message i zastanawiałem się, dlaczego głupi VB.net nie jest w stanie uzyskać tych samych informacji, co w Javie. –
W pliku Global.resx nie jest wydarzeniem o nazwie Application_Error
pożary gdy wystąpi błąd ,, można łatwo uzyskać wszelkie informacje na temat błędu i wysłać go do śledzenia błędów e-mail.
Również myślę, że wszystko, co musisz zrobić, to skompilować plik global.resx i dodać jego biblioteki DLL (2 biblioteki DLL) do folderu bin, a to zadziała!
Ehm, masz na myśli ** Global. ASAX' **, prawda? –
Można również uzyskać numer wiersza przez
string lineNumber=e.StackTrace.Substring(e.StackTrace.Length - 7, 7);
gdzie e
jest Exception
-1 Nie jestem pewna, czy to działa? StackTrace to ciąg znaków, który może zawierać od 0 do n znaków. W jaki sposób Twój kod zapewnia wiarygodne dane wyjściowe? – Jacques
@Jacques Działa dobrze, jeśli 1) numer linii jest obecny w StackTrace, a 2) numer linii ma dwie cyfry. Oba są okropnymi założeniami. – Dan
Działa:
var LineNumber = new StackTrace(ex, True).GetFrame(0).GetFileLineNumber();
Jeśli nie masz plik .PBO
:
C#
public int GetLineNumber(Exception ex)
{
var lineNumber = 0;
const string lineSearch = ":line ";
var index = ex.StackTrace.LastIndexOf(lineSearch);
if (index != -1)
{
var lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length);
if (int.TryParse(lineNumberText, out lineNumber))
{
}
}
return lineNumber;
}
VB.NET
Public Function GetLineNumber(ByVal ex As Exception)
Dim lineNumber As Int32 = 0
Const lineSearch As String = ":line "
Dim index = ex.StackTrace.LastIndexOf(lineSearch)
If index <> -1 Then
Dim lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length)
If Int32.TryParse(lineNumberText, lineNumber) Then
End If
End If
Return lineNumber
End Function
lub jako rozserzenia na klasy Exception
public static class MyExtensions
{
public static int LineNumber(this Exception ex)
{
var lineNumber = 0;
const string lineSearch = ":line ";
var index = ex.StackTrace.LastIndexOf(lineSearch);
if (index != -1)
{
var lineNumberText = ex.StackTrace.Substring(index + lineSearch.Length);
if (int.TryParse(lineNumberText, out lineNumber))
{
}
}
return lineNumber;
}
}
Niestety nie będzie działać w nie angielskim systemie operacyjnym (słowo "linia" zależy od ustawień regionalnych). –
@KvanTTT Możesz użyć 'Regex.Match' z': [^] + (\ d +) 'dla tego samego efektu. – Dan
Update do odpowiedź
// Get stack trace for the exception with source file information
var st = new StackTrace(ex, true);
// Get the top stack frame
var frame = st.GetFrame(st.FrameCount-1);
// Get the line number from the stack frame
var line = frame.GetFileLineNumber();
Sprawdź ten
StackTrace st = new StackTrace(ex, true);
//Get the first stack frame
StackFrame frame = st.GetFrame(0);
//Get the file name
string fileName = frame.GetFileName();
//Get the method name
string methodName = frame.GetMethod().Name;
//Get the line number from the stack frame
int line = frame.GetFileLineNumber();
//Get the column number
int col = frame.GetFileColumnNumber();
- 1. XCode Symbolised Crash report, pobierz numer linii zamiast przesunięcia pamięci
- 2. Numer linii w WinMerge
- 3. Numer linii awarii segmentacji
- 4. bieżący numer linii w Lua
- 5. Jak uzyskać numer bieżącej linii?
- 6. Python Kiedy wychwycę wyjątek, w jaki sposób mogę uzyskać typ, plik i numer linii?
- 7. Android ProGuard return Numer linii
- 8. Vim Konfiguruj numer linii Kolorowanie
- 9. C# Numer Wyjątek linia jest zawsze zero (0)
- 10. asp.net mvc 3 pobierz wyjątek
- 11. Jak określić plik, funkcję i numer linii?
- 12. Jak wydrukować numer linii z svn winy?
- 13. EclEmma Numer linii Wyjście Java Eclipse Plugin
- 14. python: pobierz numer bez miejsc dziesiętnych
- 15. Apache POI - pobierz numer jako liczbę całkowitą
- 16. Vim: Czy możesz usunąć konkretny numer linii z innej linii?
- 17. Regex, który pasuje do nowej linii (\ n) w C#
- 18. android studio/intellij pomysł goto numer linii
- 19. Grep nazwa pliku i numer linii
- 20. Obsługa wyjątków w Pythonie - numer linii
- 21. Uzyskaj numer linii na której zwrócono funkcję
- 22. Otrzymaj numer linii dla błędu w XCode
- 23. PHP pobiera numer linii z rejestru zdarzeń
- 24. get numer linii z bash w R
- 25. Odwróć numer w C#
- 26. C# Numer formatowanie
- 27. który wyjątek przechwytuje błąd xxxx w pythonie
- 28. C# - Pobierz Parent ToolStripMenuItem
- 29. Czy można uzyskać numer wiersza, który spowodował błąd?
- 30. C# Obsada Wyjątek
przy starcie nie ma kodu źródłowego. do czego ta linia nie będzie używana? w czasie debugowania IDE wyraźnie pokazuje linię, która zgłasza wyjątek. – ankitjaininfo
możliwy duplikat [obsługi wyjątków - wyświetla numer wiersza, w którym wystąpił błąd?] (Http: // stackoverflow.com/questions/2723607/exception-handling-display-line-number-where-error-occurred) –
możliwy duplikat [Show line number in exception handling] (http://stackoverflow.com/questions/688336/show-line -number-in-exception-handling) –