gpt4 book ai didi

c - GDB 核心调试建议传递给函数的指针在调用后变为 NULL

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:41 28 4
gpt4 key购买 nike

我知道这个标题听起来有多奇怪。我无法轻松地重现该问题,因为它是一个加载了许多库的 R 脚本,而且它每月仅崩溃一次,甚至更少。但是当它崩溃时,它总是在同一行给出相同的错误。我将跳过 R 部分并展示 gdb trace 如何显示令人困惑的值。

R 中的 C 代码片段:

// datetime.c
... SEXP attribute_hidden do_asPOSIXlt(SEXP call, SEXP op, SEXP args, SEXP env)
... {
705 SET_STRING_ELT(tzone, 1, mkChar(tzname[0]));
... ...

// envir.c
3723 SEXP mkChar(const char *name)
3724 {
3725 size_t len = strlen(name);
... ...

其中 tzname 是一个全局变量。

这是 gdb 核心调试:

gdb /usr/lib64/R/bin/exec/R ~/core.30387
(gdb) bt 3
#0 0x00007f1dca844ff1 in __strlen_sse2_pminub () from /lib64/libc.so.6
#1 0x00007f1dcb20e8f9 in mkChar (name=0x0) at envir.c:3725
#2 0x00007f1dcb1dc225 in do_asPOSIXlt (call=<optimized out>,
op=<optimized out>, args=<optimized out>,
env=<optimized out>) at datetime.c:705
(More stack frames follow…)
(gdb) frame 1
#1 0x00007f1dcb20e8f9 in mkChar (name=0x0) at envir.c:3725
3725 envir.c: No such file or directory.
(gdb) p name
$1 = 0x0
(gdb) frame 2
#2 0x00007f1dcb1dc225 in do_asPOSIXlt (call=<optimized out>, op=<optimized out>, args=<optimized out>,
env=<optimized out>) at datetime.c:705
705 datetime.c: No such file or directory.
(gdb) p tzname[0]
$2 = 0x4cf39c0 "CST"

调用者使用值 0x4cf39c0 ​​调用 mkChar(),但是,根据 gdb,它在被调用者的上下文中变为 NULL (0x0)。我知道这可能是内存问题,但如果某些 R 库弄乱了内存,则 tzname 应该为零或无效。在这里让我感到困惑的是,似乎传递给 mkChar 的参数(指针 tzname[0])在调用后以某种方式“更改”(如果它真的是更改)为 NULL。

关于进一步研究的地方有什么想法吗?

最佳答案

The caller calls mkChar() with value 0x4cf39c0

不知道

tzname[0] 中的值目前0x4cf39c0,但在调用时可能有不同的值。

如果应用程序是多线程的,您可能会点击 this错误。

关于c - GDB 核心调试建议传递给函数的指针在调用后变为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57323524/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com