- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 .Call
接口(interface)编写 R 扩展,我正在尝试追踪堆栈不平衡警告。如果我能够在代码中的不同点查询堆栈高度以隔离内部 C 函数,这些函数不会以相同的 SEXP PROTECT 堆栈高度返回,我会发现这非常有帮助。
有办法吗?
是的,我意识到如果我使用 Rcpp,我就不必担心这些,但我在这里太深了,无法改变。
一种不太理想的可能性是这样的模式:
int start, end;
PROTECT_WITH_INDEX(R_NilValue, &start);
UNPROTECT(1);
call_to_suspect_fun();
PROTECT_WITH_INDEX(R_NilValue, &end);
UNPROTECT(1);
if(start != end) error("Stack imbalance right here!");
这看起来 super 尴尬。我想它很容易变成一个函数,但如果没有更好的内置选项,我会感到惊讶。
最佳答案
堆栈的顶部不是公共(public) API 的一部分,但可以使其可见
#include "Rinternals.h"
extern int R_PPStackTop;
SEXP stacktop()
{
SEXP x;
Rprintf("%d\n", R_PPStackTop);
x = PROTECT(allocVector(INTSXP, 1));
Rprintf("%d\n", R_PPStackTop);
UNPROTECT(1);
Rprintf("%d\n", R_PPStackTop);
return Rf_ScalarInteger(R_PPStackTop);
}
导致
$ R CMD SHLIB stacktop.c 2&> /dev/null
$ R --vanilla -e "dyn.load('stacktop.so'); .Call('stacktop')"
> dyn.load('stacktop.so'); .Call('stacktop')
3
4
3
[1] 3
关于c - C : Consult SEXP PROTECT Stack Height 中的 R 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424025/
我正在写一个脚本,需要一个普通的 proplist 作为输入: script "[{error_string, \"This is broken\"}]" 我现在想做的就是将任意字符串解析为实际的 p
我正在使用 bluehost 域。我想连接数据库,但我不知道密码。经过漫长的 war ,我找到了用户名和本地主机名。我是初学者。帮助我找到 phpmyadmin 密码。 这是我的 php 数据库连接代
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 12 年前。 Improve thi
PyCharm(我想 WebStorm 和其他 JetBrains IDE 也是如此)在 event 上发出微弱警告已经有一段时间了。我在代码中使用的变量。 例如在下面的代码中 ... PyCharm
我刚刚安装了 Android studio 2.3.1,但在启动后它告诉我“Grade sync failed: connection time out: connect consult IDE lo
我有一个 ASP 应用程序。单击特定链接时,会执行一些 VB 脚本并显示 ASP 页面,但我得到的屏幕显示: Information Not Available. The requested URL
我正在使用 .Call 接口(interface)编写 R 扩展,我正在尝试追踪堆栈不平衡警告。如果我能够在代码中的不同点查询堆栈高度以隔离内部 C 函数,这些函数不会以相同的 SEXP PROTEC
更新:由于这个问题得到了一些意见,我想我最好强调一个事实,即我解决了这个问题,只需重新下载 Xcode来自 Mac App Store。重新安装后,它甚至给了我一个方便的选项来删除以前的版本并将其替换
我是一名优秀的程序员,十分优秀!