04 septiembre, 2014

Herramientas para desarrollar en 3D Slicer


Todo un desafío !! Lograr adivinar el mejor ambiente de desarrollo para poder avanzar de forma adecuada en un proyecto es toda una tarea de días de lectura e intentos. Sin embargo, no hay nada como poder tener un proyecto bien configurado con herramientas que permitan avanzar rápidamente en el desarrollo gracias al autocomplete o a simples vistas de clases y métodos adicionales. Además, siempre es ideal y es bastante útil tener una herramienta para depurar el código y saber qué sucede en ejecución. Todo esto es aun más requerido en Linux para quienes no somos los más expertos y más amigos de trabajar todo en consola.

Es por eso que luego de hacer intentos progresivos y de leer varias formas para llevar a cabo esta configuración adecuadamente en el desarrollo de nuevas extensiones o módulos para 3D Slicer (o simplemente Slicer), quiero detallar mi configuración con el proyecto ejemplo que generé en el tutorial mismo de esta herramienta para Loadable modules.

Antes que nada quiero decir que soy un seguidor sin medida de los desarrollos de Kitware. Slicer, VTK, ITK, CMake, ParaView, Kiwi, .... Sin embargo, siempre que quiero ir a los detalles y quizas contribuir al código, me cuesta bastante entender todo lo que hay por dentro. Quizas es más sencillo con alguien con más experiencia al lado guiándolo, pero esta comunidad no está tan expandida aún entre los grupos de tratamiento de señales y es difícil encontrar las personas motivadas para tener ese tipo de colaboración. Pocas veces he logrado configurar y servirme de un Depurador con estas herramientas. Aun así, creo que es ideal para entender el código mucho más rápido y entender a qué se tiene acceso en cada punto del código. Recomiendo ampliamente realizar esta configuración antes de empezar a hacer desarrollos puntuales.

Detalles de mi máquina y prerequisitos 


  - SO: Ubuntu 14.04
  - Para compilar Slicer 4, seguí las indicaciones disponibles en la página. Para esto se requiere compilar e instalar cmake 2.8 y qt 4.8.6. Al final se podrá ejecutar Slicer desde la carpeta SLICER_BUILD_PATH/Slicer-build/Slicer


Pasos a seguir


- Crea un módulo o extensión : http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules#Loadable_Modules

- Ejecuta qtcreator. Verifica en las configuración de QtCreator que se esté utilizando la versión de Qt compilada previamente para el funcionamento de Slicer.

- Arrastra desde tu explorador de archivos el CMakeLists.txt de la raiz del proyecto de tu extensión hacia QtCreator. Luego tendrás que definir la ruta al Build del proyecto. Generalmente será algo del estilo: MyExtension-build. Verifica que tengas la posibilidad de autocompletar las funciones disponibles para cada objeto o variable en el código. Mantén esta ventana abierta que nos servirá para configurar el depurador.

- Ejecuta Slicer e integra el módulo en Settings/Modules (mirar la documentación de Slicer para más información). Luego de reiniciar Slicer, verifica que el Módulo haya sido incluido y "funcione". Puedes cerrar nuevamente Slicer.

 - Sigue las indicaciones aquí descritas desde una consola para activar el debug: http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Tutorials/Debug_Instructions
   Es decir, ejecuta:

$ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
 $ ./Slicer-build/Slicer --attach-process

- En una ventana aparecerá el número del proceso de Slicer. Anótalo o recuérdalo.

- Vuelve a QtCreator y en el menu principal ve a Debug/Start Debugging/Attach to Running Application. Selecciona el proceso que corresponde al PID que fue asignado a Slicer.

Si todo sale bien, ya tienes el depurador configurado y corriendo !! Seguramente al inicio de la aplicación hay que indicarle al depurador que continue una vez, antes de que empiece a revisar los Breakpoints indicados en el código.

Espero siga funcionando así !!





No hay comentarios.:

Publicar un comentario