Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Rekcah en 22 Septiembre 2018, 09:07 am



Título: Pregunta sencilla
Publicado por: Rekcah en 22 Septiembre 2018, 09:07 am
Hola amigos,

Estoy programando en c# y estoy haciendo un programa de cifrado lo que quiero saber es como puedo ejecutar un pedazo del código para ver si me esta ejecutando lo que quiero.

lo e intentado pero me sale el form ejecutandoce y lo que quiero es que no ejecute todo el programa en si ,si no un pedazo un alinea como por ejemplo si una variable esta agarrando un valor y que me lo diga por consola así como se puede hacer en netbeans vengo de java soy nuevo porfa si me pueden ayudar

Saludos


Título: Re: Pregunta sencilla
Publicado por: OmarHack en 22 Septiembre 2018, 09:39 am
Simplemente comenta todo lo que quieras que se ignore.
Para comentar abres /* y cierras */
static void Main(string[] args)
      {
/* Todo lo qu
e esté dentro de aquí

Va a ser ignorado*/
Esto no va a ser ignorado
/* Esto sí*/ pero esto no.

//Esto si. Y esto también
Esto no.
//esto sí
//esto sí
//esto sí


      }

Mete entre /* */ lo que quieras que no sea ejecutado o pon // al inicio de cada línea.


Título: Re: Pregunta sencilla
Publicado por: Rekcah en 22 Septiembre 2018, 10:03 am
hola amigo gracias por la respuesta pero trate de hacer lo que me dices y me sale esto
https://ibb.co/jRvEmp (https://ibb.co/jRvEmp)

y si le quito lo de la console.readkey();  me dice esto
https://ibb.co/iqX8e9 (https://ibb.co/iqX8e9)

no se si es porque comencé el proyecto como form para windows o algo estoy haciendo mal

también selecciono el código y doy iniciar y nada sale lo mismo

el código de atrás solo es una prueba con una variable a ver si me lo ejecuta en una consola que es lo que quiero


Título: Re: Pregunta sencilla
Publicado por: Serapis en 22 Septiembre 2018, 12:02 pm
El método que te describe OmarHack , es un método pobre... a veces es suficiente, pero no es lo más adecuado...

En Visual Studio, desde la mismísima versión 1 (antes incluso de visual Studio, procedente de Mocosoft), siempre ha estado ahí, el menú 'Debug' (Depurar)... con muchísimas opciónes... por ejemplo:
- Correr el programa y al llegar a una línea pararse... (tecla F9 sobre la línea que quieras que pare, otra vez para eliminar el punto de interrupción en dicha línea).
- Ejecución hasta que una variable cumpla x condición,
- Ejecución paso a paso (se ejecuta una instrucción cada vez que pulsas la tecla enter). Agregar inspección. por ejemplo si tienes una variable x, puedes poner X = 20 y la condición puede ser 'deternse cuando cumpla el valor... si x por ejemplo es el contador d eun bucle al llegar a la vigésima ejecución, cuando tenga el valor 20, se detendrá ahí a la espera de que revises o sigas pulsando F5 ó F11, etc....
- Ejecución por procedimientos (ejecuta todo un procedimiento y se detiene a la salida, similar a la anterior, pero no desea revisar cada instrucción de la función si no evaluar si la función devuelve correctamente dados unos valores de entrada.
- Inspección de variables, al instante e incluso añadirlas a una vista (pinchas en la variable, o la seleccionas, y con el otro botón abres el menú emergente y ahí tienes muchas opciones... incluso te puede llevar a la parte del código donde se ha definido la variable).

...etc, etc, etc... esto viene de los 80, y es algo con lo que todo programador debe tratar y conocer al detalle, para verificar que su programa funciona correctamente y cuando no, ver qué pasa, dónde y porqué... por algo el menú se llama DEPURAR, leches...

Adjunto algunas imágenes, que son por sí mismas ilustrativas...
El menú 'Debug' cuando el proyecto está en modo edición.
(https://i.imgur.com/ZGRlq8g.png)

El mismo menú debug, cuando el proyecto está en modo 'debug' (ejecución). Es modo debug, siempre que se esté ejecutando y no esté compilado el código...
(https://i.imgur.com/fMIyMmj.png)

Cuando seleccionas o dejas el cursor sobre una variable un instante adecuado, emerge su valor y si es un 'objeto complejo', el acceso a todos los detalles dle objeto:
(https://i.imgur.com/A6z16kh.png)

Ídem, que anterior, pero usando el 'otro botón del ratón', sobre el campo deseado para hacer emerger su popupmenú:
(https://i.imgur.com/MYwI0LL.png)

Pulsa F5 o F11 para entrar en ejecución en modo debug... tal como se aprecia en las imágenes.


Título: Re: Pregunta sencilla
Publicado por: OmarHack en 22 Septiembre 2018, 12:22 pm
El problema que tienes que es que no estás en consola. Ve al nombre del proyecto, click derecho y propiedades. Ahí puedes elegir la consola como output.


Título: Re: Pregunta sencilla
Publicado por: mauriciodelos en 22 Septiembre 2018, 16:33 pm
Hola!

lo que yo hago cuando quiero aislar una parte pequeña del código sin usar el debugger, es crear un nuevo "proyecto" test solamente con esa parte del código que necesito.

Saludos
Mauricio.

Enviado desde mi ALE-L23 mediante Tapatalk


Título: Re: Pregunta sencilla
Publicado por: Rekcah en 23 Septiembre 2018, 03:17 am
Hola amigos,

Mucha gracias por sus respuestas en verdad me ayudo mucho tanto la información de depurar que dijo NEBIRE  y también como el activar el comando en propiedades como dijo OmarHack .

Realmente me di cuenta que al depurar  con el método "Alternar punto de interrupción" es muy sencillo ver como se ejecuta todo tu código linea por linea y era lo que necesitaba ya que buscaba la forma de como una variable se comporta con el método de cifrado y descifrado pero no veía la forma, por que apenas ejecutaba se iniciaba el form y no una linea de comando para saber cuando llega mi variable a preguntar por la encriptacion así que también lo active en propiedades

Así que muchas gracias aquí les adjunto una imagen de ejemplo de como me ayudaron https://ibb.co/eSRenU (https://ibb.co/eSRenU)

Saludos,


Título: Re: Pregunta sencilla
Publicado por: OmarHack en 23 Septiembre 2018, 03:22 am
Me acuerdo mi primer programa grande fuera de cifrados también pero en C++ Con el tiempo que se tardaba en darle la vuelta parecía un hash hahaha.


Título: Re: Pregunta sencilla
Publicado por: Eleкtro en 23 Septiembre 2018, 10:30 am
Aparte del uso básico de las funcionalidades de depuración que proporciona Visual Studio, lo cual ya ha explicado el compañero @NEBIRE, dependiendo del caso te podría resultar óptimo considerar la implementación de un test de unidades de código o "prueba unitaria"...

(https://www.joshmorony.com/wp-content/uploads/2016/06/xunit-testing-200x200.png.pagespeed.ic.EaDUtIywQD.webp)

Cita de: docs.microsoft.com
Se llaman pruebas unitarias porque descomponen las funciones del programa en comportamientos comprobables discretos que se pueden probar como unidades individuales.
Cita de: docs.microsoft.com
Las pruebas unitarias tienen el mayor efecto en la calidad del código cuando son parte integral del flujo de trabajo de desarrollo de software. En cuanto escriba una función u otro bloque de código de aplicación, cree pruebas unitarias que comprueben el comportamiento del código en respuesta a casos estándar, límite e incorrectos de datos de entrada, así como cualquier suposición explícita o implícita creada por el código.

  • Conceptos básicos de las pruebas unitarias (https://docs.microsoft.com/es-es/visualstudio/test/unit-test-basics?view=vs-2017)
  • Tutorial: Crear y ejecutar pruebas unitarias para código administrado (https://docs.microsoft.com/es-es/visualstudio/test/walkthrough-creating-and-running-unit-tests-for-managed-code?view=vs-2017)

Esta práctica no es estrictamente necesaria, ni mucho menos, pero aporta grandes beneficios para proyectos que están sujetos a modificaciones de forma periódica, siendo de vital ayuda en la manutención del código fuente original despues de haber pasado por modificaciones o refactorizaciones (ahorra muchísimo tiempo de depuración), y es por ello que cualquier proyecto profesional que se precie, siempre, y digo siempre incluye un sofisticado test de unidades de código.

La implementación de este tipo de test ofrece bastante versatilidad en la búsqueda de bugs al poder verificar un resultado/valor de función mediante una verificación o una aserción, y notificar/responder a ello de una forma específica, pero un test no se tiene por que limitar a ese tipo de comprobaciones, aquí tienes algunas ideas para tests genéricos aplicables a (casi)cualquier tipo de proyecto...

  • [SOURCE-CODE] Repositorio de tests de unidad y tests de integración para .NET (https://foro.elhacker.net/buscador-t462194.0.html)

Un saludo.


Título: Re: Pregunta sencilla
Publicado por: Serapis en 23 Septiembre 2018, 16:43 pm
Claro que sí, Elektro, lo que pasa es que como el usuario Rekcah, señala que es novato en VS, no quise apabullarle con mucha más info porque iba a tardar más en digerirlo que en aplicarlo...

Cuando avance es de esperar que aprenda a depurar procesos complejos o liosos con pruebas unitarias...

En NET también está  (aunque la verdad es que hace ya algún tiempo largo largo que no lo reviso), una implementación de los contratos por diseño muy útiles para asegurarse que se cumplen las 'reglas' por ambas partes (proveedor y cliente), llamada "Design by Contract Framework", el manespace me parece recordar que era DesignByContract. Si Rekcah ha/hubiera trabajado en Java con Jass tal vez podría resultarle familiar DesignByContract.


Título: Re: Pregunta sencilla
Publicado por: Eleкtro en 23 Septiembre 2018, 21:27 pm
Claro que sí, Elektro, lo que pasa es que como el usuario Rekcah, señala que es novato en VS, no quise apabullarle con mucha más info porque iba a tardar más en digerirlo que en aplicarlo...

No veo la necesidad de "excusarse" o dar explicaciones, no cabe duda de que tu respuesta es la más "válida" (por así decirlo) puesto que en su contenido se explican los aspectos de la práctica más habitual indiferentemente del nivel de aprendizaje del usuario, o dicho de otra forma, diste una solución óptima, en cambio lo que yo propuse es algo opcional o alternativo que propuse para extender la información ya proporcionada, en vez de ponerme a explicar de nuevo lo que ya fue explicado por ti, lo cual no tendría sentido. Cada cual aporta o extiende información, en función de la información que ya haya sido proporcionada por otros usuarios. (de todas formas no me gusta que se me adelanten xD, con la poca actividad de preguntas relacionadas con .NET, poder responder a una que todavía no haya sido respondida es casi como un premio.)

Tampoco hay que subestimar la solución de comentar lineas de código, como ya sugirió otro usuario. Todos lo hemos hecho alguna vez en esos días que estamos demasiado vagos.



Y ya que estamos, me gustaría mencionar que existen algunas extensiones de pago para Visual Studio que son de mucha utilidad para la depuración de código, en especial me gustaría mencionar estas dos:

  • Entrian Inline Watch (http://entrian.com/inline-watch/)

Citar
As you debug, Entrian Inline Watch displays the values of variables inline in your source code, updated live as you step through your code.

You can see the live values right there in the source, rather than having to hover over them with the mouse, or find them in the Watch windows.

(http://entrian.com/inline-watch/Entrian-Inline-Watch-Factorial-Animation-2.gif)

  • RevDeBug (https://revdebug.com/)

Citar
Value prompts
Real values right in your code during debugging. No more writing everything into the watch.

Constant Monitoring
Monitor every deployment for errors and exceptions. Replay your users’bugs and cut down on manual testing and rollbacks.

Session Recording
3 types of interactive logs from local and remote debugging sessions, including production environments.

0HiclcyjPj8 QQqvf-KMOLQ

Si tienen la ocasión de probar y familiarizarse con alguna de esas extensiones, merecerá la pena.

Por último, mencionar que también hay varias extensiones orientadas al control de test de unidades de código (ej. Nunit, o xUnit.Net), pero todas me resultan altamente innecesarias si no se utilizan en un ambiente de trabajo muy profesional. Teniendo el framework de unit testing provisto por .NET Framework no veo necesario depender de otro distinto.

Un saludo!