c - GDB 中的数组错误(用 C 语言编写)

标签 c arrays debugging

我正在尝试查找数组元素的内存位置。函数基本上是这样的(在 C 中):

int function(struct MyStruct *s)
{
    char myArray[16];

    printf("\n");
    printf("\n");
    gets(myArray);
    return strcasecmp(s->a,guess);
}

根据在线 GDB 指南,我应该能够执行“x myArray”或“x myArray[0]”或“p myArray”或“p myArray[0]”来查看元素或内存位置。我在 function 和 gets 处设置了断点(并一直持续到 gets 断点),但是当我尝试 GDB 命令时,我得到“没有这样的文件”。我还尝试了“b 15”在数组和“b 16”处设置断点。但我仍然遇到同样的错误。为什么会发生这种情况,我该如何解决?

最佳答案

"break main, break function, break gets, break 15 (which didn't work), break 16 (which didn't work), run, s (until I reach the gets breakpoint), x myArray, x myArray[0], p myArray, p myArray[0]"

你做的错了

当您遇到 gets 断点时,您会在 gets 中停止。

在那里,myArray 变量是不可见的——它在 function 中,而不是在 gets 中。

你也不能在 getsbreak 15 ,因为你没有 libc 的调试信息(这是 gets 实现)。

您要做的是从gets 中的断点开始finish(这将使您返回到function)。 现在您应该可以查看myArraybreak 15

关于c - GDB 中的数组错误(用 C 语言编写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10364093/

相关文章:

C程序如何以表格格式对齐打印

c - 如何使用 C 中的结构和选择排序按字符串对文件进行排序

php - 如何在单个数组中获取两个数组而不丢失 mysql 和 php 中的值?

debugging - AeDebug\Debugger 中的哪个字符串将 IDA Pro 作为调试器附加?

c - 发生崩溃时查看堆栈

c - 使用属性 warn_unused_result [-Wunused-result] 声明的警告 : ignoring return value of ‘write’ ,

c++ - 最小值不在二叉树中?

c - 了解发布顺序并在 C11 中同步

arrays - 如何在Kotlin中将Set(HashSet)转换为数组?

c++ - 如何从 dbx 的 pretty-print 函数调用 dbx 自己的打印函数