В настоящее время я пытаюсь написать плагин C ++ NodeJS, используя nbind с универсальным примером .Сборка и запуск примера работает отлично.Теперь у меня есть два вопроса: первый касается общей отладки, второй - моей проблемы.
Я добавил RF24 lib.Построение объекта RF24 также работает, но, например, вызов функции getChannel()
или printDetails()
в Nodejs возвращает просто
terminated called after throwing an instance of 'int'
npm ERR! Test failed. See above for more details
Как я могу получить более подробную информацию об ошибках, например, номер файла и номер строки?Я попытался добавить флаги node-gyp configure --debug build --debug
, но при сборке также создается только папка Release .
Моя команда построения следующая, как предложено в универсальном примере.
"build:native": "autogypi -r build && node-gyp -C build/native configure --debug build --debug && copyasm build/native dist"
Я использую RPi Zero W (Arm v6).Мой текущий binding.gyp , расположенный в . / Build / native , выглядит следующим образом
{
"targets": [
{
"includes": [ "../auto.gypi" ],
"sources": [
"../../src/example.cpp",
"../../libs/RF24-master/RF24.cpp",
"../../libs/RF24-master/utility/RPi/bcm2835.cpp",
"../../libs/RF24-master/utility/RPi/interrupt.cpp",
"../../libs/RF24-master/utility/RPi/spi.cpp"
],
"include_dirs": [
"../../src",
"../../libs/RF24-master"
],
"cflags": [
"-std=c++11",
"-fpermissive"
],
"cflags_cc!": [ "-fno-rtti" ]
}
],
"includes": [
"../auto-top.gypi"
]
}
Упрощенная программа example.cpp
выглядит как
#include "RF24.h"
#include "example.h"
Example::Example(uint16_t cePin, uint16_t spiBus): cePin(cePin), spiBus(spiBus) {
this->radio = new RF24(cePin, spiBus);
}
uint8_t Example::getChannel() {
return this->radio->getChannel();
}
И соответствующий заголовок example.h
выглядит следующим образом:
#ifndef EXAMPLE_H
#define EXAMPLE_H
class Example{
uint8_t cePin = 22, spiBus = 0;
RF24* radio;
public:
Example(uint16_t cePin, uint16_t spiBus);
uint8_t getChannel();
};
#endif
#include "nbind/nbind.h"
NBIND_CLASS(Example) {
construct<uint8_t, uint8_t>();
method(getChannel);
}
Итак, есть два вопроса
- Общие и более важные: Как получить более удобные опции отладки для nbindc ++ addons?
- Более конкретно для моей проблемы, связанной с RF24: почему эта ошибка появляется при каждом вызове функции RF24?