Saturday, April 6, 2019

Depurando lo que implementas en Go 1.12

Depuración de lo que implementa en Go 1.12

21 de marzo de 2019

Introducción

Go 1.11 y Go 1.12 hacen un progreso significativo para permitir que los desarrolladores depuren los mismos binarios optimizados que implementan en producción.
  

A medida que el compilador Go se ha vuelto cada vez más agresivo en la producción de binarios más rápidos, hemos perdido terreno en la depuración. En Go 1.10, los usuarios necesitaban deshabilitar las optimizaciones por completo para tener una buena experiencia de depuración con herramientas interactivas como Delve. Pero los usuarios no deberían tener que intercambiar el rendimiento por la capacidad de depuración, especialmente cuando ejecutan servicios de producción. Si su problema está ocurriendo en producción, necesita depurarlo en producción, y eso no debería requerir el despliegue de binarios no optimizados.
  

Para Go 1.11 y 1.12, nos enfocamos en mejorar la experiencia de depuración en binarios optimizados (la configuración predeterminada del compilador Go). Las mejoras incluyen
  

  • Inspección de valor más precisa, en particular para los argumentos en la entrada de la función;
  • Identificación más precisa de los límites de las sentencias para que los pasos sean menos saltos y los puntos de interrupción sean más frecuentes donde el programador espera;
  • Y soporte preliminar para Delve para llamar Funciones de Go (goroutines y recolección de basura hacen esto más complicado que en C y C ++).

Depuración de código optimizado con Delve

Delve es un depurador para Go on x86 que soporta Linux y macOS. Delve es consciente de los goroutines y otras características de Go y proporciona una de las mejores experiencias de depuración de Go. Delve es también el motor de depuración detrás de GoLand VS Code y Vim .
  

La excavación normalmente reconstruye el código con el que se está depurando con -gcflags "all = -N -l" que deshabilita la integración y la mayoría de las optimizaciones. Para depurar código optimizado con ahondar, primero compile el binario optimizado, luego use dlv exec your_program para depurarlo. O bien, si tiene un archivo del núcleo de un bloqueo, puede examinarlo con dlv core your_program your_core . Con 1.12 y las últimas versiones de Delve, deberías poder examinar muchas variables, incluso en binarios optimizados.
  

Inspección de valor mejorado

Al depurar binarios optimizados producidos por Go 1.10, los valores de las variables generalmente no estaban disponibles. En contraste, comenzando con Go 1.11, las variables generalmente se pueden examinar incluso en binarios optimizados, a menos que se hayan optimizado por completo. En Go 1.11, el compilador comenzó a emitir listas de ubicaciones DWARF para que los depuradores puedan rastrear variables a medida que se mueven dentro y fuera de los registros y reconstruyen objetos complejos que se dividen en diferentes registros y ranuras de pila.
  

Pasos mejorados

Esto muestra un ejemplo de paso a través de una función simple en un depurador en 1.10, con fallas (líneas omitidas y repetidas) resaltadas con flechas rojas.
  

Las fallas como esta hacen que sea fácil perder la pista de dónde te encuentras cuando pasas por un programa e interfiere con los puntos de ruptura.
  

Ir 1.11 y 1.12 registrar información de límites de la declaración y hacer un mejor trabajo de seguimiento de los números de línea de origen a través de optimizaciones y alineación. Como resultado, en el paso 1.12, el paso a través de este código se detiene en cada línea y lo hace en el orden que usted esperaría.
  

Llamadas de función

El soporte de llamada de función en Delve aún está en desarrollo, pero los casos simples funcionan. Por ejemplo:
  

 (dlv) llamada fib (6)
> main.main () ./hello.go:15 (PC: 0x49d648)
Valores devueltos:
    ~ r1: 8 

El camino a seguir

Go 1.12 es un paso hacia una mejor experiencia de depuración para binarios optimizados y tenemos planes para mejorarlo aún más.
  

Existen compensaciones fundamentales entre la capacidad de depuración y el rendimiento, por lo que nos centramos en los defectos de depuración de mayor prioridad y trabajamos para recopilar métricas automatizadas para supervisar nuestro progreso y capturar regresiones.
  

Nos estamos enfocando en generar información correcta para los depuradores sobre ubicaciones de variables, por lo que si se puede imprimir una variable, se imprime correctamente. También estamos considerando hacer que los valores variables estén disponibles más tiempo, particularmente en puntos clave como sitios de llamadas, aunque en muchos casos, mejorar esto requeriría ralentizar la ejecución del programa. Finalmente, estamos trabajando para mejorar el paso a paso: nos estamos enfocando en el orden de paso con pánico, el orden de paso alrededor de los bucles y, en general, estamos tratando de seguir el orden de origen siempre que sea posible.
  

Una nota sobre el soporte de macOS

Go 1.11 comenzó a comprimir la información de depuración para reducir los tamaños binarios. Delve admite de forma nativa, pero ni LLDB ni GDB admiten información de depuración comprimida en macOS. Si está utilizando LLDB o GDB, hay dos soluciones: cree binarios con -ldflags = -compressdwarf = false o use splitdwarf ( go get golang.org/x/ tools / cmd / splitdwarf ) para descomprimir la información de depuración en un binario existente.
  

Por David Chase


READ MORE – CLICK HERE

www.Down.co.ve


No comments:

Post a Comment

Como crear tarjetas Virtuales Visa o MasterCard con tu divisa y las ventajas que ofrecen

Hoy día, gracias al creciente mundo del Internet se le ha permitido a cada persona poder acceder a muchos productos o servicios. Y en estos ...