r ggplot - 怎麼撞R?




3 Answers

最簡單的方法是調用C代碼。 C提供了一個標準函數abort() [1]來完成你想要的。 你需要打電話: .Call("abort")

正如@Phillip指出你可能需要通過以下方式加載libc

  • 在Linux上, dyn.load("/lib/x86_64-linux-gnu/libc.so.6")在發出.Call("abort") 。 路徑當然可能因係統而異。

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

  • 在Windows上(我剛剛在XP上測試它,因為我無法獲得更新的版本。)你需要安裝Rtools [2] 。 之後你應該加載dyn.load("C:/.../Rtools/bin/cygwin1.dll")

title position

有沒有一種簡單的方法來觸發R中的崩潰? 這僅用於測試目的,以查看在後台使用R的某個程序如何對崩潰做出反應並幫助確定是否有一些罕見的問題是由於崩潰造成的。




我要從@Spacedman那裡竊取一個想法,但是我通過複製他的Twitter提要給了他完整的概念信用:

Segfault #rstats只需一個簡單的步驟: options(device=function(){});plot(1)報告危險,會使你的R會話崩潰。 - Barry Rowlingson(@geospacedman) 2014年7月16日




我會用普通的C做這個,因為我的C ++ - foo不是Dirkian:

創建一個C文件segv.c

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

在命令行編譯它(Windows用戶必須自己解決這個問題):

R CMD SHLIB segv.c

在R中,加載並運行:

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

產生段錯誤:

> .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

這與托馬斯在我提交的圖形系統錯誤報告中引用的行為相同,可能會在某一天得到修復。 然而,這個雙線程將永遠引發一個段錯誤...

也許Dirk可以單行Rcpp-ise嗎?




Related

r crash

Tags

r   crash