Самая глупая ошибка в истории, убедитесь, что вы компилируете свой js-код.
Повышение уровня сигнала № 6 ( SIGABRT
в Linux) - это один из способов сделать это (хотя имейте в виду, что SIGABRT не требует, чтобы было 6 во всех реализациях POSIX, поэтому вы можете использовать само значение SIGABRT
, если это не является чем-то другим, кроме быстрого кода отладки).
#include <signal.h>
: : :
raise (SIGABRT);
Вызов abort ()
также вызовет дамп ядра, и вы даже можете сделать это без завершения процесса, вызов fork ()
с последующим abort ()
только в дочернем элементе - см. этот ответ для подробностей.
Несколько лет назад Google выпустил библиотека coredumper .
Обзор
Библиотека coredumper может быть скомпилирована в приложения для создания дампов ядра работающей программы - без завершения работы. Он поддерживает как однопоточные, так и многопоточные дампы ядра, даже если ядро изначально не поддерживает многопоточные файлы ядра.
Coredumper распространяется в соответствии с условиями лицензии BSD.
Пример
нет означает полный пример; он просто дает вам представление о том, как выглядит API coredumper.
#include
... WriteCoreDump ('core.myprogram'); / * Продолжаем, мы сгенерировали файл ядра, * но мы не разбились. * /
Это не то, о чем вы просили, но, может быть, даже лучше :)
Как указано в странице руководства по сигналам , любой сигнал с действием, указанным как «ядро», вызовет дамп ядра. Вот несколько примеров:
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGSEGV 11 Core Invalid memory reference
Убедитесь, что вы включили дампы ядра:
ulimit -c unlimited
#include <stdlib.h> // C
//#include <cstdlib> // C++
void core_dump(void)
{
abort();
}
Invoke
abort();
Связано, иногда вы ' d, как обратная трассировка без фактического дампа ядра, и позволить программе продолжить работу: проверьте функции glibc backtrace () и backtrace_symbols (): http://www.gnu.org/s/libc/manual/html_node/Backtraces.html
Вы можете использовать kill (2) для отправки сигнала.
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
Итак,
kill(getpid(), SIGSEGV);
#include <assert.h>
.
.
.
assert(!"this should not happen");