utilizar - todas las excepciones en c#
C#- obtener el número de línea que arrojó la excepción (10)
En un bloque catch
, ¿cómo puedo obtener el número de línea que arrojó una excepción?
Actualiza a la respuesta
// 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();
De manera simple, use la función Exception.ToString()
, devolverá la línea después de la descripción de la excepción.
También puede verificar la base de datos de depuración del programa, ya que contiene información / registros de depuración sobre toda la aplicación.
En el archivo Global.resx hay un evento llamado Application_Error
se activa cada vez que se produce un error, puede obtener fácilmente cualquier información sobre el error y enviarlo a un correo electrónico de seguimiento de errores.
También creo que todo lo que debes hacer es compilar el archivo global.resx y agregar su dll (2 dlls) a tu carpeta bin y ¡funcionará!
Esto funciona para mí:
try
{
//your code;
}
catch(Exception ex)
{
MessageBox.Show(ex.StackTrace + " ---This is your line number, bro'' :)", ex.Message);
}
Funciona:
var LineNumber = new StackTrace(ex, True).GetFrame(0).GetFileLineNumber();
Puede incluir archivos de símbolos .PDB
asociados al ensamblaje que contienen información de metadatos y, cuando se lanza una excepción, contendrá información completa en la pila donde se originó esta excepción. Contendrá los números de línea de cada método en la pila.
Revisa este
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();
Si necesita el número de línea para algo más que el rastro de pila formateado que obtiene de Exception.StackTrace, puede usar la clase 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();
}
Tenga en cuenta que esto solo funcionará si hay un archivo pdb disponible para el ensamblaje.
Si no tiene el archivo .PBO
:
DO#
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
O como una extensión en la clase de Excepción
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;
}
}
También puede obtener el número de línea por
string lineNumber=e.StackTrace.Substring(e.StackTrace.Length - 7, 7);
donde e
es una Exception