2013-07-03 4 views
1

У меня есть набор дополнений Node.js C++. Они отлично работают сами по себе, и я могу назвать их функции, поэтому все правильно связано. Когда я добавляю вызовы внешних библиотек, мне нужно (чтобы получить доступ к базе данных) все работает отлично:Мой код работает только в C++, но тот же код не работает из Node.js

  • Узел видит и собирает внешние классы
  • я получаю ошибки соединения, если данные DB конфигурации неправильно.

Однако, если данные соединения правы, тогда он будет делать свалку ядра без объяснения причин. Я пробовал все, что мог, до get any data from the core dump, но у меня ничего нет.

Если я принимаю тот же код, я использую и компилирую его и запускаю исключительно как C++, он работает. Так что я знаю:

  • Данные соединения правильно
  • библиотеки работают и подключения к базе данных (я получаю строки обратно)

Так что мой вывод: есть что-то работает в Node.js, которая вызывает разрыв этого кода.

Если у кого-то есть больше опыта Node.js и есть предложения о том, что делать или что может произойти, я был бы очень признателен.

+0

Ядро свалка * есть * описание. – Pointy

+0

Есть ли в любом случае я могу получить больше информации о том, что происходит не так? – Alex

+1

вы можете посмотреть трассировку стека из основного дампа с помощью 'gdb' или что-то в этом роде. Убедитесь, что вы создаете символы отладки. – Pointy

ответ

0

Это дикое предположение, поскольку код не был предоставлен, но возможно ли, что код v8 выполняется в другом потоке (отличном от основного)?

Например, некоторая обратная связь, вызываемая при успешном соединении, которая вызывает вызовы функций node/v8 (я предполагаю, что те внешние библиотеки, о которых вы упоминаете, запускают собственные потоки для выполнения своей работы).

Если это так, проблема в том, что код узла/v8 может быть вызван только из основного потока. Эти SO потоки могут быть полезны:

Что касается отладки, за исключением изучения ядра, вы можете также запустить свой код с помощью GDB, так что вы можете установить точки останова на некоторые интересные мест.

$ gdb node 
(gdb) run test_connection.js 

или

(gdb) start test_connection.js 
(gdb) break <some interesting place> 
(gdb) cont 

GDB run and start info

Даже если вы не установить точки останова, когда он выходит из строя, вы будете иметь возможность изучить трассировки стека и посмотреть, что происходит в разные потоки.

Конечно, как предложили другие, все должно было быть построено с помощью отладочных символов.

Смежные вопросы