如何打印完整的字符数组gdb

Posted

技术标签:

【中文标题】如何打印完整的字符数组gdb【英文标题】:How to print full char array gdb 【发布时间】:2021-12-31 20:04:44 【问题描述】:

如何打印完整的aligned_depth.get_data()。它应该是一个字符数组:https://gist.github.com/richardrl/224eb53d4bc1cedda36f5bda1d78ca18#file-realsense_multicam-cpp-L390

这些是我尝试过的一些事情:

(gdb) print *aligned_depth.get_data()@depth_size
Attempt to dereference a generic pointer.
(gdb) print (char*) aligned_depth.get_data()@depth_size
Only values in memory can be extended with '@'.
(gdb) print (char*)aligned_depth.get_data()@depth_size
Only values in memory can be extended with '@'.

get_data 在这里:https://intelrealsense.github.io/librealsense/doxygen/clas-s-rs2_1_1frame.html#a4b373fc81617be881b691a97b0f8358c

【问题讨论】:

get_data() 的结果赋值给一个变量,然后打印出来。 这可能对你有帮助:***.com/questions/29528732/… 【参考方案1】:

这应该可行:

(gdb) p *((char*)aligned_depth.get_data())@depth_size

鉴于此测试,至少它对我使用 GDB-10.0 有效:

const char p[] = "abcd\0efgh";
const int  data_size = sizeof(p);
const void* get_data()  return p; 

int main()  return 0; 
gcc -g -w x.c && gdb -ex start -q ./a.out

Reading symbols from ./a.out...
Temporary breakpoint 1 at 0x113a: file x.c, line 5.
Starting program: /tmp/a.out

Temporary breakpoint 1, main () at x.c:5
5       int main()  return 0; 

(gdb) p *((char*)get_data())@data_size
$1 = "abcd\000efgh"

【讨论】:

以上是关于如何打印完整的字符数组gdb的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gdb 为 Fortran 程序打印数组大小(绑定)

使用gdb时,如何在Pascal中打印数组中的一部分值

GDB调试字符数组时指针和数组区别的体现

如何将二维字符串数组打印为字符串

gdb学习[第二版]

C如何打印字符串数组中字符串的大小