我正在使用httr在运行Linux的远程服务器上授权Google Analytics API。到目前为止,该代码一直可以完美地工作,并且仍然可以在我们的本地计算机上运行。不幸的是,由于这是API授权,因此很难复制。
endpoints <- httr::oauth_endpoints('google')
secrets <- jsonlite::fromJSON(PATH_TO_JSON_FILE)
scope <- 'https://www.googleapis.com/auth/analytics'
token <- httr::oauth_service_token(endpoints, secrets, scope)
在Rstudio Server上运行时,它崩溃并显示一条警报,提示“ R遇到致命错误。会话已终止”。没有错误输出到控制台。
我在通过R终端(在远程服务器上)运行R时运行了相同的代码,这次出现了double free or corruption (fasttop)
错误,其中包含很多文本,我将打印其中的一些文本。
token <- httr::oauth_service_token(endpoint = endpoints,secrets = secrets,scope = scope)
*** Error in `/usr/lib/R/bin/exec/R': double free or corruption (fasttop): 0x0000000002e5df20 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fb846b637e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x8037a)[0x7fb846b6c37a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7fb846b7053c]
/usr/local/lib/R/site-library/openssl/libs/openssl.so(R_base64_encode+0x117)[0x7fb842943557]
/usr/lib/R/lib/libR.so(+0xd2c9c)[0x7fb8471a5c9c]
/usr/lib/R/lib/libR.so(Rf_eval+0x7bd)[0x7fb8471e320d]
/usr/lib/R/lib/libR.so(+0x112cae)[0x7fb8471e5cae]
.... MANY LINES OF THIS AND THEN A NEW SECTION ...
======= Memory map: ========
00400000-00401000 r-xp 00000000 fd:01 523429 /usr/lib/R/bin/exec/R
00600000-00601000 r--p 00000000 fd:01 523429 /usr/lib/R/bin/exec/R
00601000-00602000 rw-p 00001000 fd:01 523429 /usr/lib/R/bin/exec/R
0121f000-0343e000 rw-p 00000000 00:00 0 [heap]
7fb83c000000-7fb83c021000 rw-p 00000000 00:00 0
7fb83c021000-7fb840000000 ---p 00000000 00:00 0
7fb8421dd000-7fb84247e000 r-xp 00000000 fd:01 7364 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fb84247e000-7fb84267d000 ---p 002a1000 fd:01 7364 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
.... MANY LINES OF THIS ALSO AND IT ENDS WITH ....
7ffcf87a9000-7ffcf880a000 rw-p 00000000 00:00 0 [stack]
7ffcf884f000-7ffcf8852000 r--p 00000000 00:00 0 [vvar]
7ffcf8852000-7ffcf8854000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Aborted (core dumped)
如果可以显示整个错误,我可以这样做。我研究了双重释放或损坏,似乎它来自基本C代码的内存损坏错误。可以使用一个名为valgrind的linux工具来更深入地研究这些问题,并且我从使用valgrind作为调试器运行代码中获得了输出,但对我来说,它看起来似乎还是很乱的,但是如果有人认为,我将对其进行编辑这可能是有用的。
答案 0 :(得分:1)
这是某些Linux机器上的错误,我怀疑在系统提供的openSSL或curl库中。我使用的是Arch,只需将我的所有软件包还原一个月即可解决此错误。