c++ - 使用 gdb 进行调试 - (gdb) "x/s pointer"输出

标签 c++ c gdb gdbserver

我正在尝试使用 gdb 进行调试。我知道如果你想以字符串形式输出,你必须使用“x/s Ptr”。有时效果很好。但很多时候我得到的是 Null 值,即“”或一些随机数值。我的文件有 10000 行代码。 :-p 请找到一些 gdb 输出。例如

krb5_get_credentials_for_user (context=0x59c00eb0, options=4, ccache=0x5a001d40, in_creds=0x5ab022a8, subject_cert=0x0, 
out_creds=0x5ab02378) at test_abc.c:696
(gdb) x/s 0x59c00eb0
0x59c00eb0:  "$\247\016\227"
(gdb) x/s 0x5ab022a8
0x5ab022a8:  ""

有人可以告诉我如何解决这个问题吗?提前致谢!

最佳答案

But many times I am getting either Null value i.e. " " or some random numeric values.

你所展示的内容没有任何问题。只是您正在检查的内存位置不是指向字符串 (0x59c00eb0) 或指向空字符串 (0x5ab022a8)。

您没有提供任何证据表明这些位置应该指向字符串,事实上,正如(现已删除)评论所示,context 指向 struct _krb5_context ,其中包含魔数(Magic Number)作为第一个成员。因此,您应该使用x/w来检查它。

关于c++ - 使用 gdb 进行调试 - (gdb) "x/s pointer"输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38236473/

相关文章:

java - CMake 对 `JNI_CreateJavaVM' 的 undefined reference

带 while 循环的 C++ 数组

c++ - 命名空间和包含生成链接错误

c - 将 C 代码升级到 VB.NET - union 结构

c++ - 如何在后台针对守护进程运行 gdb?

c++ - 在类中为结构重载 operator=

c - 如何在不编写完整解析器的情况下将部分源程序转换为库调用?

c - 关于 fopen 中的二进制模式

c - Linux 上的 gdb 不使用 2 的补码

c - GDB "jump"命令未跳转到有效上下文?