locked
Obtener el número de línea sin exception RRS feed

  • Pregunta

  • Quisiera mostrar un MsgBox con el número de línea en el cual esta el propio msgbox (aunque no se produzca ninguna exception). 

    La idea es saber en que número de línea se esta ejecutando un comando.

    Ejemplo:

    Private sub sbMensajes()

         dim vTotal as double

         vTotal=1+1

         msgBox ("Nº Linea: [Aquí quiero mostrar el número de línea del código fuente]")

    End sub

    jueves, 15 de febrero de 2018 9:17

Respuestas

  • "PGF_MSDN" preguntó:

    > Quisiera mostrar un MsgBox con el número de línea en el cual esta
    > el propio msgbox (aunque no se produzca ninguna exception).
    >
    > La idea es saber en que número de línea se esta ejecutando un comando.

    Hola:

    Para obtener el número de línea tienes que hacer uso del objeto StackTrace, y procurar compilar tu aplicación para que generen los archivos *.pdb del ensamblado, los cuales deberás de distribuir junto con el archivo ejecutable de tu aplicación, con independencia de que se produzca o no una excepción.

    Como comentas que deseas obtener el número de línea aunque no se haya producido una excepción, tienes que ejecutar el MsgBox inmediatamente después de crear la instancia del objeto StackTrace, para sumarle una unidad al valor devuelto por el método GetFileLineNumber del primer marco de la pila del objeto StackTrace, tal y como muestra el siguiente ejemplo:

        Private Sub sbMensajes()
    
            Dim vTotal As Double
    
            vTotal = 1 + 1
    
            ' Crear un objeto StackTrace que capture el número de línea
            ' del primer marco, al cual le sumamos una unidad ya que el
            ' cuadro de mensaje se mostrará en la siguiente línea.
            Dim numeroLinea As Integer = New StackTrace(True).GetFrames(0).GetFileLineNumber() + 1
            MessageBox.Show(String.Format("Nº Linea: {0}", numeroLinea))
    
        End Sub

    Y aquí tienes el resultado:

    Si solamente haces uso del objeto StackTrace en el cuadro de mensaje, también puedes crear su instancia en la misma línea, de esta manera te ahorras tener que sumar unidades:

    MessageBox.Show(String.Format("Nº Linea: {0}", New StackTrace(True).GetFrames(0).GetFileLineNumber()))

    Y en cuanto a los archivos *.pdb, abre las Propiedades del proyecto, selecciona la pestaña Compilar y pulsa el botón inferior Opciones avanzadas de compilación... Asegúrate que en Generar información de depuración esté seleccionado al menos el valor pdb-only, tal y como muestra la siguiente captura de pantalla:

    Debes de tener en cuenta que cuando se compila un ejecutable .NET, las líneas en blanco desaparecen del archivo final, de ahí que se necesiten los archivos de información de depuración *.pdb.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    • Editado Enrique M. MontejoModerator jueves, 15 de febrero de 2018 17:29 Ampliar información
    • Propuesto como respuesta Pablo Rubio jueves, 15 de febrero de 2018 23:45
    • Marcado como respuesta PGF_MSDN viernes, 16 de febrero de 2018 7:29
    jueves, 15 de febrero de 2018 17:07
    Moderador