Как отлаживать двоичный модуль nodejs?

У меня есть модуль node.js, написанный на С++, который предоставляет некоторые привязки для библиотеки С++. Библиотека выходит из строя с SIGSEGV, поэтому мне нужно отладить ее с помощью GDB и выяснить, что пошло не так.

У меня уже есть источник для модуля в ./node_modules/somelib/, и если я перейду в эту папку и наберите npm install, библиотека будет скомпилирована и может быть использована через require ('somelib') из node.js. Я могу прикрепить gdb к node и воспроизвести ошибку, но в stacktrace я просто вижу node_modules/somelib/Release/somelib.node.

Я не уверен, что это важно, но библиотека скомпилирована с помощью node-gyp.

  • Вопрос 1: Как загрузить исходный код или точку gdb в исходный код?
  • Вопрос 2: Как настроить node-gyp для создания символов отладки?

Ответы

Ответ 1

Я только что нашел ответ на это в документации node-gyp. Решение заключается в вызове процесса сборки с помощью флага --debug. Это значит вызвать node-gyp configure --debug и/или node-gyp build --debug. Затем вместо папки Release будет создана папка Debug. gdb автоматически загрузит исходные файлы.

Ответ 2

Вы можете добавить каталог, содержащий источник модуля, в путь поиска gdb:

(gdb) directory /path/to/source

Смотрите: http://sourceware.org/gdb/onlinedocs/gdb/Source-Path.html

Кроме того, чтобы получить node-gyp отладочные символы, установите node-gyp-dbg/dev или эквивалент или скомпилируйте его с помощью -g