Instalar llnode en macOS Big Sur

El complemento llnode agrega la capacidad de inspeccionar el código fuente JavaScript a las funciones de depuración estándar de C / C ++ cuando se trabaja con procesos Node.js o volcados de núcleo en LLDB. Digamos que es la herramienta imprescindible si queremos detectar fallos en la gestión de memoria en nuestro código.

Entorno

  • macOS Big Sur 11.2.3
  • node 14.15.4
  • lldb-1200.0.44.2

Al ser llnode un plugin para lldb necesitamos instalar este primero, en el caso de macOS es suficiente con instalar las herramientas de consola de Xcode, nada más, no es necesario tener la versión completa instalada.

sudo xcode-select --install

Para comprobar que todo es correcto podemos utilizar

lldb --version

Ahora vamos a instalar llnode y la mejor manera es utilizando brew:

brew install llnode

Es importante tener en cuenta que esto solo nos instala el plugin pero no lo vincula con lldb ni genera un comando con el que podamos llamar a llnode desde consola directamente así que es normal que una vez instalado tengamos esto si lo intentamos llamar desde consola:

% llnode
zsh: command not found: llnode

Para comprobar realmente que el plugin se ha instalado correctamente podemos utilizar el siguiente truco, que además nos dará la ruta donde se ha instalado, dato necesario para los siguientes pasos.

brew link llnode

Warning: Already linked: /usr/local/Cellar/llnode/3.2.0_1
To relink:
  brew unlink llnode && brew link llnode

Una  vez instalado tenemos que vincular (o agregar) llnode a nuestra instalación de lldb. Para activar este plugin basta con editar el archivo ~/.lldbinit y agregar la siguiente línea:

plugin load /usr/local/Cellar/llnode/3.2.0_1/llnode.dylib

Ahora solo nos queda utilizarlo. llnode puede correr con un proceso existente o con un volcado del core, en este post voy a utilizar la segunda opción. Primero necesitamos el PID del proceso de Node sobre el cual queremos generar el volcado, una vez tenemos este dato (ps aux | grep node) generamos el volcado:

lldb --attach-pid {PID} -b -o 'process save-core "core.{PID}"'

Con esto ya podemos utilizar llnode

lldb
(lldb) target create node -c core.{PID}
(lldb) v8 nodeinfo
(lldb) v8 findjsobjects

Podéis  encontrar información adicional en estos enlaces, pero no sigáis esas instrucciones de instalción

Github page
Usage tutorial 

Otras formas de instalar llnode en Big Sur pueden dar diferentes errores, como los siguientes:

npm install -g llnode

Reading lldb version...
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory
'/Library/Developer/CommandLineTools' is a command line tools instance
Error: Command failed: xcodebuild -version
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory
'/Library/Developer/CommandLineTools' is a command line tools instance
brew update && brew install --with-lldb --with-toolchain llvm
Error: invalid option: --with-lldb

Comentarios