带有.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
中收到的错误消息。谢谢