使用 gdb 调试 - (gdb) "x/s pointer" 输出
Debugging with gdb - (gdb) "x/s pointer" output
我正在尝试使用 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: "$767"
(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
,其中包含幻数作为第一个成员。因此,您应该使用x/w
来检查它。
... fine some times. But many times I am getting either Null value i.e. " "
or some random numeric...
去过那里,做过那件事。请允许我鼓励您发挥创造力。
我有时会创建一个函数(称之为 foo?bar?show?dump?),但它不会被正在调试的程序使用。该函数通常是 c 风格的(因为 gdb 似乎理解得更好,调用起来更简单),全局范围,简单。临时安装此功能关闭(在同一个文件中?)您想要提高可见性有时会有所帮助。
然后我可以使用 gdb p 命令调用这个函数,例如
gdb> p foo
可以将参数传递给 foo,但如果我接触代码来调试某些东西,我通常会让 foo 更有能力……当没有参数时它只做一件事。或者也许使用一个 int 参数 (bar(7)) 切换显示更多或不同。
实验。
这不是典型的,我怀疑更好地了解 gdb 可能是值得的,如果我能记住它以备下次需要时使用。有时候 gdb 就是不明白,我也想不通为什么。其他时候,我会添加一个指针并尝试打印它:
gdb> p *foobar
我正在尝试使用 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: "$767"
(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
,其中包含幻数作为第一个成员。因此,您应该使用x/w
来检查它。
... fine some times. But many times I am getting either Null value i.e. " " or some random numeric...
去过那里,做过那件事。请允许我鼓励您发挥创造力。
我有时会创建一个函数(称之为 foo?bar?show?dump?),但它不会被正在调试的程序使用。该函数通常是 c 风格的(因为 gdb 似乎理解得更好,调用起来更简单),全局范围,简单。临时安装此功能关闭(在同一个文件中?)您想要提高可见性有时会有所帮助。
然后我可以使用 gdb p 命令调用这个函数,例如
gdb> p foo
可以将参数传递给 foo,但如果我接触代码来调试某些东西,我通常会让 foo 更有能力……当没有参数时它只做一件事。或者也许使用一个 int 参数 (bar(7)) 切换显示更多或不同。
实验。
这不是典型的,我怀疑更好地了解 gdb 可能是值得的,如果我能记住它以备下次需要时使用。有时候 gdb 就是不明白,我也想不通为什么。其他时候,我会添加一个指针并尝试打印它:
gdb> p *foobar