SlideShare a Scribd company logo
1 of 39
Download to read offline
Dos viajes al
centro de la JVM
CRaSH & YouDebug
José Miguel Rodríguez
@jmiguel
MADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015
# whoami --asPerson --verbose
José Miguel Rodríguez
@jmiguel
email: me@jmiguel.eu
Blog Personal: http://www.jmiguel.eu
Toda la info social: http://about.me/jmiguel.rodriguez
Guitarrista de Jazz, Rock y Blues
Fotógrafo wannabe
Aerotrastornado (http://www.aerotrastornados.com) (Gracias M$)
MADRID · NOV 27-28 · 2015
# whoami --asDeveloper
Cofundador de Virtual Software
http://www.virtualsw.com
Programando desde 1992
GwBasic ↠ Clipper ↠ VisualBasic (todos tenemos un pasado) ↠ Java ↠ Groovy
BBS ↠ Primeros ISP (¿alguien recuerda Infovía?) ↠ Seguridad ↠ AWS
MADRID · NOV 27-28 · 2015
Esta presentación...
Estará disponible al menos en SlideShare y http://www.jmiguel.eu
El video estará (¡espero!) disponible en el canal de MadridGUG
Habrá enlaces «sticky» por un tiempo en Twitter: @jmiguel
Dos Partes
Shell Interactivo Debugger Automático
YouDebug
60% 40%
MADRID · NOV 27-28 · 2015
Shell Interactivo para la JVM
Creado por Julien Viet (@julienviet)
OpenSource
http://crashub.org
https://github.com/crashub/crash
git clone git@github.com:crashub/crash.git
MADRID · NOV 27-28 · 2015
Última versión 1.3.1
Requiere Java 6+ / Groovy 1.7+
Instalación:
Descarga de fuentes de github + mvn package
Binarios desde http://crashub.org
sdkman / gvm
MADRID · NOV 27-28 · 2015
Plugins para varios frameworks
MADRID · NOV 27-28 · 2015
¿Que significa «conectar a una JVM»?
«Entrar dentro de la misma mediante telnet o ssh, como si
fuera otro ordenador, ver lo que está pasando y ejecutar
comandos desde dentro. »
Es un interface de línea de comandos (CLI) para la JVM
MADRID · NOV 27-28 · 2015
Posibilidad de embeber CRaSH en nuestra aplicación, tanto
escritorio como web (.jar o .war)
Tenemos comandos predefinidos pero podemos crear
propios, en Java o en Groovy (probablemente más en el
futuro)
Extrema facilidad para crear nuestros propios comandos
MADRID · NOV 27-28 · 2015
Por cierto....
!(Groovy) ?
MADRID · NOV 27-28 · 2015
✓ Lenguaje en la JVM, parecido a Java (curva de aprendizaje muy suave)
✓ Hace la programación mucho más fácil, cómoda y legible
✓ Lenguaje dinámico, compilación en tiempo de ejecución (o no: @CompileStatic)
✓ Permite hacer scripts: no hay necesidad de crear una clase para todo.
✓ Closures: código como un tipo de datos (± Lambdas en Java 8)
MADRID · NOV 27-28 · 2015
✓ ¿Interesado?. Excelente introducción by Pablo Alba en
Youtube - MadridGUG
➢ Busca «Porque Groovy no es Java sin punto y coma»
✓ ¿Más interesado?. Meetup de MadridGUG
MADRID · NOV 27-28 · 2015
Los comandos en CRaSH pueden cooperar siguiendo la
filosofía de comandos Unix:
Programas pequeños que hagan solo una cosa y la hagan bien.
Capaces de trabajar juntos usando texto como interfaz universal
Ken Thompson
MADRID · NOV 27-28 · 2015
Diseño modular, es posible activar sólo lo que nos interese al
embeberlo en nuestra aplicación.
✓ Conectores ssh, telnet , crash.js usando websockets
Plugins de autenticación
✓ ssh key
✓ simple (usuario / password)
✓ Extensible
MADRID · NOV 27-28 · 2015
Modos de operación
✓ Standalone: Ejecutamos CRaSH en solitario para crear
comandos, por ejemplo. Utilidad limitada
✓ Attach: Nos conectamos a un PID de JVM local
✵ Embedded ↞ Nos conectamos por ssh/telnet a una JVM
remota
MADRID · NOV 27-28 · 2015
Otras cosas que molan
✓ Autocompletado estilo bash de:
- Comandos
- Nombres de fichero, nombres de clases…
✓ Renders para tipos de datos
✓ Modificación de la salida de datos. Por ejemplo: colores,
tablas...
-
MADRID · NOV 27-28 · 2015
Modo Standalone y modo Attach
✓ Útil para primera toma de contacto
✓ Limitado a que ejecutar todo en la misma máquina física.
✓ En modo Attach los comandos se ejecutan en la JVM
controlada
✓ Conectamos desde CRaSH a otra JVM dentro de nuestra
misma máquina local.
✓ No tenemos que tocar nada en nuestro programa. PID
✓ Podemos crear nuevos script y ejecutarlos ¡sin compilar!.
(Groovy Power!)
MADRID · NOV 27-28 · 2015
Modo Standalone y modo Attach
✓ Vamos a ver la estructura de carpetas
✓ Creación de nuevos scripts
✓ Ejemplo 1: Hola mundo
✓ Ejemplo 2: Comando de ejemplo cmotionCommands
<demo mode=”on”>
MADRID · NOV 27-28 · 2015
Modo Embebido
✓ Nos conectamos a una máquina remota por telnet o ssh
✓ Tenemos que haber embebido CRaSH previamente
✓ Aplicaciones de escritorio: jar provisto
✓ Aplicaciones web: jar o war
<demo mode=”on”>
MADRID · NOV 27-28 · 2015
Modo Embebido - Aplicación Web
✓ Es igual que el modo embebido, pero ahora tenemos un
interface desde el navegador
✓ Sólamente tenemos que desplegar el war provisto -o
construirlo- y desplegarlo en nuestro servidor
✓ Es posible incluir nuestros comandos creando un war a
medida e incluyendo en él los jar que necesitemos
✓ El contexto de despliegue también es configurable en
web.xml
MADRID · NOV 27-28 · 2015
Modo Embebido - Aplicación Web
✓ El contexto de despliegue también es configurable en
web.xml
✓ O bien lo embebemos como listener en nuestra webapp
<web-app>
<listener>
<listener-class>org.crsh.plugin.WebPluginLifeCycle</listener-class>
</listener>
</web-app>
<mini-micro-demo mode=”on”>
MADRID · NOV 27-28 · 2015
</CRaSH>
MADRID · NOV 27-28 · 2015
YouDebug
Debugger no interactivo
(un proyecto tan modesto que ni siquiera tiene logotipo)
Kohsuke Kawaguchi
MADRID · NOV 27-28 · 2015
YouDebug
YouDebug es un depurador no interactivo escrito en Groovy
que nos puede ayudar en ciertas situaciones.
✓ Sistema desplegado en producción
✓ Encontrar bugs de difícil reproducción en nuestro
entorno
✓ Usa el Java Debugger Interface para ejecutarse junto con
la aplicación destino
✓ https://youdebug.kenai.com/
MADRID · NOV 27-28 · 2015
YouDebug
¿Como hacemos debug?
println() nadie, ¿verdad?
MADRID · NOV 27-28 · 2015
YouDebug
✓ IDE
✓ Fuentes disponibles
✓ Breakpoints
✓ Evaluación de variables
✓ Evaluación de condiciones
✓ Asignación de variables
Depurando «en casa»
MADRID · NOV 27-28 · 2015
YouDebug
¿En producción?
✓ Llama el cliente. ¡Tenemos un bug!
✓ El cliente está lejos. O en un búnker
✓ No conseguimos reproducir el error en local. Los datos del
cliente son privados. No nos los deja para probar.
✓ No le podemos mandar los fuentes (NDAs) y decirle que
depure el.
MADRID · NOV 27-28 · 2015
Entorno del cliente
- Base de datos (y datos)
- Sistema Operativo
- Versión de JDK
- Memoria
YouDebug
Solución
Enviar un script para que haga nuestro trabajo
MADRID · NOV 27-28 · 2015
YouDebug
Receta de uso
1 - Ejecutar la aplicación en modo debug
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
2 - Ejecutar nuestro script de YouDebug
java -jar youdebug.jar -socket 5005 nuestroScript.ydb
MADRID · NOV 27-28 · 2015
YouDebug
¿Qué podemos hacer con YouDebug?
✓ Definir breakpoints
✓ Evaluar expresion
✓ Obtener valores y modificar variables
✓ Listar threads y obtener stack traces de los mismos
✓ Obtener un heap dump
✓ Monkey Patching (no recomendable… pero divertido)
✓ No tener que esperar que pase algo por 1m, 1d, 1M ...
MADRID · NOV 27-28 · 2015
YouDebug
¿Cómo definimos un BreakPoint?
✓ Cuando llegamos a una determinada línea de código
✓ Cuando salta una exception
✓ Cuando se hace referencia a una variable o cambia su valor
✓ Cuando una clase es cargada / descargada
✓ Cuando se entra o sale de un método
✓ Cuando un thread es creado o destruido
MADRID · NOV 27-28 · 2015
YouDebug Aun así..
… a veces System.out.println() puede ser la mejor opción. Pero
la siguiente es sin duda YouDebug: introduce poca variación.
MADRID · NOV 27-28 · 2015
YouDebug
Scripts mínimos
vm.methodEntryBreakPoint( "eu.jmiguel.myClass", "main",
{ method -> println ("Entramos en main")})
vm.breakpoint( "eu.jmiguel.myClass", 12) {
println ("Estamos en la linea 12 de myClass")
}
MADRID · NOV 27-28 · 2015
YouDebug
A tener en cuenta
✓ La ejecución de consultas a variables desde nuestro script
son, en general, contra un proxy de las variables. Se puede
forzar a que sea contra las variables de la otra JVM
✓ Si nuestro script lanza una exception podemos dejar
inestable la JVM remota
MADRID · NOV 27-28 · 2015
YouDebug
<demo mode=”on”>
MADRID · NOV 27-28 · 2015
YouDebug
</demo mode>
(Agradecimientos a Wolfgang Schell @jetztgradnet)
MADRID · NOV 27-28 · 2015
YouDebug
MADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015
¿Preguntas?
(las que dé tiempo)
¿Quieres más información?
«La única pregunta estúpida es la que no se hace»
Twitter: @jmiguel
email : me@jmiguel.eu
YouDebug
Cuestionario (4 preguntas, 15 segundos en contestar)
Please! https://goo.gl/2wqoze

More Related Content

What's hot

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!
Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!
Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
 
Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!
Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!
Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 Micael Gallego
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduMicael Gallego
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...
¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...
¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...Marco Bellido
 
Automatizacion de proyectos con gradle
Automatizacion de proyectos con gradleAutomatizacion de proyectos con gradle
Automatizacion de proyectos con gradleEdson Chávez Montaño
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosMicael Gallego
 
PHP for Android: scripting PHP en Android
PHP for Android: scripting PHP en AndroidPHP for Android: scripting PHP en Android
PHP for Android: scripting PHP en AndroidIrontec
 

What's hot (20)

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!
Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!
Codemotion Madrid 2016 - De Java a Groovy: ¡Hora de Aventuras!
 
Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!
Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!
Madrid-GUG (Alicante) 2017 - De Java a Groovy: ¡Hora de Aventuras!
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
 
20170405 - Ecosistema Javascript
20170405 - Ecosistema Javascript20170405 - Ecosistema Javascript
20170405 - Ecosistema Javascript
 
Grails en el Fonasol
Grails en el FonasolGrails en el Fonasol
Grails en el Fonasol
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018
 
Eleva tu capacidad con Groovy
Eleva tu capacidad con GroovyEleva tu capacidad con Groovy
Eleva tu capacidad con Groovy
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenVidu
 
Gradle vs Maven
Gradle vs MavenGradle vs Maven
Gradle vs Maven
 
¿Por qué open source?
¿Por qué open source?¿Por qué open source?
¿Por qué open source?
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
Git Flow y GitOps
Git Flow y GitOpsGit Flow y GitOps
Git Flow y GitOps
 
¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...
¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...
¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...
 
Automatizacion de proyectos con gradle
Automatizacion de proyectos con gradleAutomatizacion de proyectos con gradle
Automatizacion de proyectos con gradle
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
Atica Dev Ops II
Atica Dev Ops IIAtica Dev Ops II
Atica Dev Ops II
 
JQuery + React js
JQuery + React js JQuery + React js
JQuery + React js
 
PHP for Android: scripting PHP en Android
PHP for Android: scripting PHP en AndroidPHP for Android: scripting PHP en Android
PHP for Android: scripting PHP en Android
 

Similar to Dos viajes al centro de la JVM: CRaSH & YouDebug

Tu DevOp me da trabajo: Soy auditor de seguridad
Tu DevOp me da trabajo: Soy auditor de seguridadTu DevOp me da trabajo: Soy auditor de seguridad
Tu DevOp me da trabajo: Soy auditor de seguridadDaniel Garcia (a.k.a cr0hn)
 
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015José Manuel García García
 
Tv Future is Apps - tvOS vs AndroidTV
Tv Future is Apps - tvOS vs AndroidTVTv Future is Apps - tvOS vs AndroidTV
Tv Future is Apps - tvOS vs AndroidTVPablo Azaña Sánchez
 
Adaptive BI Framework
Adaptive BI Framework Adaptive BI Framework
Adaptive BI Framework SolidQ
 
Introducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCrossIntroducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCrossJavier Suárez Ruiz
 
Asp.net 5 en linux y mac, herramientas e integración
Asp.net 5 en linux y mac, herramientas e integraciónAsp.net 5 en linux y mac, herramientas e integración
Asp.net 5 en linux y mac, herramientas e integraciónrobertogg
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmasZuriel Diaz
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Eduard Tomàs
 
Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoMicael Gallego
 
Swift migration. the true history
Swift migration. the true historySwift migration. the true history
Swift migration. the true historyidealistacreamcode
 
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...Plain Concepts
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueOrquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueGlobant
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open sourcescrumecuador
 

Similar to Dos viajes al centro de la JVM: CRaSH & YouDebug (20)

Tu DevOp me da trabajo: Soy auditor de seguridad
Tu DevOp me da trabajo: Soy auditor de seguridadTu DevOp me da trabajo: Soy auditor de seguridad
Tu DevOp me da trabajo: Soy auditor de seguridad
 
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
 
Tv Future is Apps - tvOS vs AndroidTV
Tv Future is Apps - tvOS vs AndroidTVTv Future is Apps - tvOS vs AndroidTV
Tv Future is Apps - tvOS vs AndroidTV
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy
 
Adaptive BI Framework
Adaptive BI Framework Adaptive BI Framework
Adaptive BI Framework
 
Introducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCrossIntroducción a Xamarin utilizando MVVMCross
Introducción a Xamarin utilizando MVVMCross
 
Asp.net 5 en linux y mac, herramientas e integración
Asp.net 5 en linux y mac, herramientas e integraciónAsp.net 5 en linux y mac, herramientas e integración
Asp.net 5 en linux y mac, herramientas e integración
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Primeros pasos con aurelia
Primeros pasos con aureliaPrimeros pasos con aurelia
Primeros pasos con aurelia
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmas
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++
 
Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigo
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Swift migration. the true history
Swift migration. the true historySwift migration. the true history
Swift migration. the true history
 
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
DotNet 2019 | Pablo Santos Luaces - Como migrar un producto multiplataforma a...
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueOrquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
 

Dos viajes al centro de la JVM: CRaSH & YouDebug

  • 1. Dos viajes al centro de la JVM CRaSH & YouDebug José Miguel Rodríguez @jmiguel MADRID · NOV 27-28 · 2015
  • 2. MADRID · NOV 27-28 · 2015 # whoami --asPerson --verbose José Miguel Rodríguez @jmiguel email: me@jmiguel.eu Blog Personal: http://www.jmiguel.eu Toda la info social: http://about.me/jmiguel.rodriguez Guitarrista de Jazz, Rock y Blues Fotógrafo wannabe Aerotrastornado (http://www.aerotrastornados.com) (Gracias M$)
  • 3. MADRID · NOV 27-28 · 2015 # whoami --asDeveloper Cofundador de Virtual Software http://www.virtualsw.com Programando desde 1992 GwBasic ↠ Clipper ↠ VisualBasic (todos tenemos un pasado) ↠ Java ↠ Groovy BBS ↠ Primeros ISP (¿alguien recuerda Infovía?) ↠ Seguridad ↠ AWS
  • 4. MADRID · NOV 27-28 · 2015 Esta presentación... Estará disponible al menos en SlideShare y http://www.jmiguel.eu El video estará (¡espero!) disponible en el canal de MadridGUG Habrá enlaces «sticky» por un tiempo en Twitter: @jmiguel Dos Partes Shell Interactivo Debugger Automático YouDebug 60% 40%
  • 5. MADRID · NOV 27-28 · 2015 Shell Interactivo para la JVM Creado por Julien Viet (@julienviet) OpenSource http://crashub.org https://github.com/crashub/crash git clone git@github.com:crashub/crash.git
  • 6. MADRID · NOV 27-28 · 2015 Última versión 1.3.1 Requiere Java 6+ / Groovy 1.7+ Instalación: Descarga de fuentes de github + mvn package Binarios desde http://crashub.org sdkman / gvm
  • 7. MADRID · NOV 27-28 · 2015 Plugins para varios frameworks
  • 8. MADRID · NOV 27-28 · 2015 ¿Que significa «conectar a una JVM»? «Entrar dentro de la misma mediante telnet o ssh, como si fuera otro ordenador, ver lo que está pasando y ejecutar comandos desde dentro. » Es un interface de línea de comandos (CLI) para la JVM
  • 9. MADRID · NOV 27-28 · 2015 Posibilidad de embeber CRaSH en nuestra aplicación, tanto escritorio como web (.jar o .war) Tenemos comandos predefinidos pero podemos crear propios, en Java o en Groovy (probablemente más en el futuro) Extrema facilidad para crear nuestros propios comandos
  • 10. MADRID · NOV 27-28 · 2015 Por cierto.... !(Groovy) ?
  • 11. MADRID · NOV 27-28 · 2015 ✓ Lenguaje en la JVM, parecido a Java (curva de aprendizaje muy suave) ✓ Hace la programación mucho más fácil, cómoda y legible ✓ Lenguaje dinámico, compilación en tiempo de ejecución (o no: @CompileStatic) ✓ Permite hacer scripts: no hay necesidad de crear una clase para todo. ✓ Closures: código como un tipo de datos (± Lambdas en Java 8)
  • 12. MADRID · NOV 27-28 · 2015 ✓ ¿Interesado?. Excelente introducción by Pablo Alba en Youtube - MadridGUG ➢ Busca «Porque Groovy no es Java sin punto y coma» ✓ ¿Más interesado?. Meetup de MadridGUG
  • 13. MADRID · NOV 27-28 · 2015 Los comandos en CRaSH pueden cooperar siguiendo la filosofía de comandos Unix: Programas pequeños que hagan solo una cosa y la hagan bien. Capaces de trabajar juntos usando texto como interfaz universal Ken Thompson
  • 14. MADRID · NOV 27-28 · 2015 Diseño modular, es posible activar sólo lo que nos interese al embeberlo en nuestra aplicación. ✓ Conectores ssh, telnet , crash.js usando websockets Plugins de autenticación ✓ ssh key ✓ simple (usuario / password) ✓ Extensible
  • 15. MADRID · NOV 27-28 · 2015 Modos de operación ✓ Standalone: Ejecutamos CRaSH en solitario para crear comandos, por ejemplo. Utilidad limitada ✓ Attach: Nos conectamos a un PID de JVM local ✵ Embedded ↞ Nos conectamos por ssh/telnet a una JVM remota
  • 16. MADRID · NOV 27-28 · 2015 Otras cosas que molan ✓ Autocompletado estilo bash de: - Comandos - Nombres de fichero, nombres de clases… ✓ Renders para tipos de datos ✓ Modificación de la salida de datos. Por ejemplo: colores, tablas... -
  • 17. MADRID · NOV 27-28 · 2015 Modo Standalone y modo Attach ✓ Útil para primera toma de contacto ✓ Limitado a que ejecutar todo en la misma máquina física. ✓ En modo Attach los comandos se ejecutan en la JVM controlada ✓ Conectamos desde CRaSH a otra JVM dentro de nuestra misma máquina local. ✓ No tenemos que tocar nada en nuestro programa. PID ✓ Podemos crear nuevos script y ejecutarlos ¡sin compilar!. (Groovy Power!)
  • 18. MADRID · NOV 27-28 · 2015 Modo Standalone y modo Attach ✓ Vamos a ver la estructura de carpetas ✓ Creación de nuevos scripts ✓ Ejemplo 1: Hola mundo ✓ Ejemplo 2: Comando de ejemplo cmotionCommands <demo mode=”on”>
  • 19. MADRID · NOV 27-28 · 2015 Modo Embebido ✓ Nos conectamos a una máquina remota por telnet o ssh ✓ Tenemos que haber embebido CRaSH previamente ✓ Aplicaciones de escritorio: jar provisto ✓ Aplicaciones web: jar o war <demo mode=”on”>
  • 20. MADRID · NOV 27-28 · 2015 Modo Embebido - Aplicación Web ✓ Es igual que el modo embebido, pero ahora tenemos un interface desde el navegador ✓ Sólamente tenemos que desplegar el war provisto -o construirlo- y desplegarlo en nuestro servidor ✓ Es posible incluir nuestros comandos creando un war a medida e incluyendo en él los jar que necesitemos ✓ El contexto de despliegue también es configurable en web.xml
  • 21. MADRID · NOV 27-28 · 2015 Modo Embebido - Aplicación Web ✓ El contexto de despliegue también es configurable en web.xml ✓ O bien lo embebemos como listener en nuestra webapp <web-app> <listener> <listener-class>org.crsh.plugin.WebPluginLifeCycle</listener-class> </listener> </web-app> <mini-micro-demo mode=”on”>
  • 22. MADRID · NOV 27-28 · 2015 </CRaSH>
  • 23. MADRID · NOV 27-28 · 2015 YouDebug Debugger no interactivo (un proyecto tan modesto que ni siquiera tiene logotipo) Kohsuke Kawaguchi
  • 24. MADRID · NOV 27-28 · 2015 YouDebug YouDebug es un depurador no interactivo escrito en Groovy que nos puede ayudar en ciertas situaciones. ✓ Sistema desplegado en producción ✓ Encontrar bugs de difícil reproducción en nuestro entorno ✓ Usa el Java Debugger Interface para ejecutarse junto con la aplicación destino ✓ https://youdebug.kenai.com/
  • 25. MADRID · NOV 27-28 · 2015 YouDebug ¿Como hacemos debug? println() nadie, ¿verdad?
  • 26. MADRID · NOV 27-28 · 2015 YouDebug ✓ IDE ✓ Fuentes disponibles ✓ Breakpoints ✓ Evaluación de variables ✓ Evaluación de condiciones ✓ Asignación de variables Depurando «en casa»
  • 27. MADRID · NOV 27-28 · 2015 YouDebug ¿En producción? ✓ Llama el cliente. ¡Tenemos un bug! ✓ El cliente está lejos. O en un búnker ✓ No conseguimos reproducir el error en local. Los datos del cliente son privados. No nos los deja para probar. ✓ No le podemos mandar los fuentes (NDAs) y decirle que depure el.
  • 28. MADRID · NOV 27-28 · 2015 Entorno del cliente - Base de datos (y datos) - Sistema Operativo - Versión de JDK - Memoria YouDebug Solución Enviar un script para que haga nuestro trabajo
  • 29. MADRID · NOV 27-28 · 2015 YouDebug Receta de uso 1 - Ejecutar la aplicación en modo debug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 2 - Ejecutar nuestro script de YouDebug java -jar youdebug.jar -socket 5005 nuestroScript.ydb
  • 30. MADRID · NOV 27-28 · 2015 YouDebug ¿Qué podemos hacer con YouDebug? ✓ Definir breakpoints ✓ Evaluar expresion ✓ Obtener valores y modificar variables ✓ Listar threads y obtener stack traces de los mismos ✓ Obtener un heap dump ✓ Monkey Patching (no recomendable… pero divertido) ✓ No tener que esperar que pase algo por 1m, 1d, 1M ...
  • 31. MADRID · NOV 27-28 · 2015 YouDebug ¿Cómo definimos un BreakPoint? ✓ Cuando llegamos a una determinada línea de código ✓ Cuando salta una exception ✓ Cuando se hace referencia a una variable o cambia su valor ✓ Cuando una clase es cargada / descargada ✓ Cuando se entra o sale de un método ✓ Cuando un thread es creado o destruido
  • 32. MADRID · NOV 27-28 · 2015 YouDebug Aun así.. … a veces System.out.println() puede ser la mejor opción. Pero la siguiente es sin duda YouDebug: introduce poca variación.
  • 33. MADRID · NOV 27-28 · 2015 YouDebug Scripts mínimos vm.methodEntryBreakPoint( "eu.jmiguel.myClass", "main", { method -> println ("Entramos en main")}) vm.breakpoint( "eu.jmiguel.myClass", 12) { println ("Estamos en la linea 12 de myClass") }
  • 34. MADRID · NOV 27-28 · 2015 YouDebug A tener en cuenta ✓ La ejecución de consultas a variables desde nuestro script son, en general, contra un proxy de las variables. Se puede forzar a que sea contra las variables de la otra JVM ✓ Si nuestro script lanza una exception podemos dejar inestable la JVM remota
  • 35. MADRID · NOV 27-28 · 2015 YouDebug <demo mode=”on”>
  • 36. MADRID · NOV 27-28 · 2015 YouDebug </demo mode> (Agradecimientos a Wolfgang Schell @jetztgradnet)
  • 37. MADRID · NOV 27-28 · 2015 YouDebug
  • 38. MADRID · NOV 27-28 · 2015
  • 39. MADRID · NOV 27-28 · 2015 ¿Preguntas? (las que dé tiempo) ¿Quieres más información? «La única pregunta estúpida es la que no se hace» Twitter: @jmiguel email : me@jmiguel.eu YouDebug Cuestionario (4 preguntas, 15 segundos en contestar) Please! https://goo.gl/2wqoze