validar plugin plantillas personalizar form español enviar customizer columnas color cf7 campos cambiar cabeceras boton adicionales r crash

plugin - Cómo colgar R?



plantillas contact form 7 (5)

¿Hay una manera simple de desencadenar un bloqueo en R? Esto es solo para fines de prueba, para ver cómo un determinado programa que usa R en el fondo reacciona ante un bloqueo y ayuda a determinar si algunos problemas raros se deben a fallas o no.


Como se menciona en un comentario a su pregunta, el enfoque mínimo es una simple llamada a la función del sistema abort() . Una forma de hacerlo en una línea es

R> Rcpp::cppFunction(''int crashMe(int ignored) { ::abort(); }''); R> crashMe(123) Aborted (core dumped) $

o puede usar el paquete en línea:

R> library(inline) R> crashMe <- cfunction(body="::abort();") R> crashMe() Aborted (core dumped) $

Por supuesto, también puede hacer esto fuera de Rcpp o en línea, pero luego debe tratar con las formas dependientes del sistema de compilación, vinculación y carga.


Haré esto en C simple porque mi C ++ - foo no es Dirkian:

Cree un archivo C, segv.c :

#include <signal.h> void crashme(){raise(SIGSEGV);}

Compilarlo en la línea de comandos (los usuarios de Windows tendrán que resolver esto por sí mismos):

R CMD SHLIB segv.c

En R, carga y ejecuta:

dyn.load("segv.so") # or possibly .dll for Windows users .C("crashme")

Produciendo un segfault:

> .C("crashme") *** caught segfault *** address 0x1d9e, cause ''unknown'' Traceback: 1: .C("crashme") Possible actions: 1: abort (with core dump, if enabled) 2: normal R exit 3: exit R without saving workspace 4: exit R saving workspace Selection: 1 aborting ... Segmentation fault

Este es el mismo comportamiento que el que Thomas menciona en el informe de error del sistema de gráficos que he archivado y que podría arreglarse algún día. Sin embargo, este dos líneas siempre planteará un segfault ...

Tal vez Dirk puede una línea-Rcpp-¿cierto?


Hay un paquete completo en GitHub dedicado a esto:

choque

Paquete R que bloquea intencionadamente una sesión R. ADVERTENCIA: destinado a prueba.

Cómo se instala un paquete de github está cubierto en otras preguntas.


La forma más fácil es llamar a C code. C proporciona una función estándar abort() [1] que hace lo que quiere. .Call("abort") llamar: .Call("abort") .

Como señaló @Phillip, puede que necesite cargar libc través de:

  • en Linux, dyn.load("/lib/x86_64-linux-gnu/libc.so.6") antes de emitir .Call("abort") . La ruta puede variar según el sistema.

  • en OS X, dyn.load("/usr/lib/libc.dylib")

  • en Windows (lo probé en XP porque no pude obtener una versión más nueva). Necesitará instalar Rtools [2] . Después de eso, debe cargar dyn.load("C:/.../Rtools/bin/cygwin1.dll") .


Voy a robarle una idea a @Spacedman, pero le estoy dando crédito conceptual completo al copiar de su cuenta de Twitter:

Segfault #rstats en un simple paso: options(device=function(){});plot(1) reportado Danger, bloqueará su sesión R. - Barry Rowlingson (@geospacedman) 16 de julio de 2014