Как отлаживать двоичный модуль 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