Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有.C接口的gdb(共享对象)_C_R_Debugging_Interface_Gdb - Fatal编程技术网

带有.C接口的gdb(共享对象)

带有.C接口的gdb(共享对象),c,r,debugging,interface,gdb,C,R,Debugging,Interface,Gdb,我正在通过调用从R包装器调用C中编码的共享对象。C代码导致分段错误,我想用它来帮助我调试这段代码 是否可以将gdb与.C接口一起使用 我在MAC OSX 10.11.3上无论您是通过.C还是调用编译后的代码。调用对于通过gdb调试R会话都不重要。举个例子,考虑下面的代码:故意通过一个空指针:< /P>引起SeaStult(在我的系统上)。 #include <R.h> #include <stdio.h> #include <string.h> void r

我正在通过调用从
R
包装器调用
C
中编码的共享对象。
C
代码导致分段错误,我想用它来帮助我调试这段代码

是否可以将
gdb
与.C接口一起使用


我在MAC OSX 10.11.3上

无论您是通过
.C
还是
调用编译后的代码。调用
对于通过
gdb调试R会话都不重要。举个例子,考虑下面的代码:<强>故意通过一个空指针:< /P>引起SeaStult<强>(在我的系统上)。
#include <R.h>
#include <stdio.h>
#include <string.h>

void rtest(void)
{
    int* p = NULL;
    printf("%d\n", *p);
} 
然后加载共享库,调用函数,然后继续调试会话:

nathan@nathan-deb:/tmp$ R --debugger=gdb

#GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1
#Copyright (C) 2014 Free Software Foundation, Inc.
#License GPLv3+: GNU GPL version 3 or later 
#
# omitted
#
#Reading symbols from /usr/local/lib/R/bin/exec/R...done.
#
(gdb) r 
dyn.load("rtest.so")
f <- function() .C("rtest")
f()

#Program received signal SIGSEGV, Segmentation fault.
#rtest () at rtest.c:8
#8      printf("%d\n", *p);
动态加载(“rtest.so”)
f无论您是通过
.C
还是
.Call调用编译后的代码,通过
gdb
调试R会话都不重要。举个例子,考虑下面的代码:<强>故意通过一个空指针:< /P>引起SeaStult<强>(在我的系统上)。
#include <R.h>
#include <stdio.h>
#include <string.h>

void rtest(void)
{
    int* p = NULL;
    printf("%d\n", *p);
} 
然后加载共享库,调用函数,然后继续调试会话:

nathan@nathan-deb:/tmp$ R --debugger=gdb

#GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1
#Copyright (C) 2014 Free Software Foundation, Inc.
#License GPLv3+: GNU GPL version 3 or later 
#
# omitted
#
#Reading symbols from /usr/local/lib/R/bin/exec/R...done.
#
(gdb) r 
dyn.load("rtest.so")
f <- function() .C("rtest")
f()

#Program received signal SIGSEGV, Segmentation fault.
#rtest () at rtest.c:8
#8      printf("%d\n", *p);
动态加载(“rtest.so”)
我不明白为什么不。您是否尝试在调试模式下启动R(
R--debugger=gdb
)?我有点困惑,因为我习惯于通过可执行文件执行
gdb
命令。当我执行
R--debugger=gdb
时,R打开(没有
(dgb)
提示)。然后,我可以将我的R.wrapper作为source()执行,但我似乎没有gdb接口。像以前一样,我们在代码< C >代码>代码的中间达到分割错误,并且从代码> R < /代码>收到消息,通知我分割错误。看起来就像以前一样。你能帮我吗?你肯定已经安装了
gdb
?另外,您使用的是哪种操作系统
gdb
应该用上面的命令立即启动;我将在一分钟后添加一个更详细的示例进行演示。是的,
gdb
已安装,并且在可执行文件上运行良好。我在MAC OS X 10.11.3上(信息添加到帖子中)。谢谢你的帮助!实际上我仍然有问题,但我意识到我的问题不是关于.C接口的,而是关于在R中使用
gdb
的。我想我会让你发布你的答案,并会打开一个新的帖子,更准确地解释我在
R-d gdb
中收到的错误消息。谢谢,我不明白为什么不。您是否尝试在调试模式下启动R(
R--debugger=gdb
)?我有点困惑,因为我习惯于通过可执行文件执行
gdb
命令。当我执行
R--debugger=gdb
时,R打开(没有
(dgb)
提示)。然后,我可以将我的R.wrapper作为source()执行,但我似乎没有gdb接口。像以前一样,我们在代码< C >代码>代码的中间达到分割错误,并且从代码> R < /代码>收到消息,通知我分割错误。看起来就像以前一样。你能帮我吗?你肯定已经安装了
gdb
?另外,您使用的是哪种操作系统
gdb
应该用上面的命令立即启动;我将在一分钟后添加一个更详细的示例进行演示。是的,
gdb
已安装,并且在可执行文件上运行良好。我在MAC OS X 10.11.3上(信息添加到帖子中)。谢谢你的帮助!实际上我仍然有问题,但我意识到我的问题不是关于.C接口的,而是关于在R中使用
gdb
的。我想我会让你发布你的答案,并会打开一个新的帖子,更准确地解释我在
R-d gdb
中收到的错误消息。谢谢