C++ 使用阵列扩展stl-views.gdb

C++ 使用阵列扩展stl-views.gdb,c++,arrays,stl,gdb,C++,Arrays,Stl,Gdb,我想和帕雷一起延长比赛时间 如何确定gdb中std::array的大小(N) # # std::array<> # define parray if $argc == 0 help parray else set $size = ??? .. # #std::数组 # 定义阵列 如果$argc==0 帮助帕雷 其他的 设置$size=??? .. 感谢您的帮助尝试使用设置$size=$arg0.size() 我已经用以下代码进行了测试(其中未明确使用.s

我想和帕雷一起延长比赛时间

如何确定gdb中std::array的大小(N)

#
# std::array<>
#

define parray
  if $argc == 0
    help parray
  else
    set $size = ???
..
#
#std::数组
#
定义阵列
如果$argc==0
帮助帕雷
其他的
设置$size=???
..

感谢您的帮助

尝试使用
设置$size=$arg0.size()

我已经用以下代码进行了测试(其中未明确使用
.size()

#包括
#包括
#包括以获得尺寸。也就是说,使用

set $size = sizeof($arg0._M_elems) / sizeof(*$arg0._M_elems)
gdb定义代码变为

define parray
  if $argc == 0
    help parray
  else
    set $size = sizeof($arg0._M_elems) / sizeof(*$arg0._M_elems)
    print($size)
end

很抱歉,因此我得到“无法计算函数--可能是内联的”(Cannot evaluate function--may be inlined)()您只能使用现有正在运行的进程调用函数,并且如果这些函数包含在二进制文件中(例如,如果它们没有被链接器丢弃或被编译器内联)。但是,GDB允许您编写XFrimes,这是C++方法不可用时使用的C++方法的Python实现。此外,gdb已经为标准库中的许多方法提供了xmethods,包括许多容器的
size()
方法。我已经用
.size
这样的方法进行了测试,即使在从核心文件进行调试时也有效。我已经用一种即使不能使用
.size()
的方法更新了答案。
set $size = sizeof($arg0._M_elems) / sizeof(*$arg0._M_elems)
define parray
  if $argc == 0
    help parray
  else
    set $size = sizeof($arg0._M_elems) / sizeof(*$arg0._M_elems)
    print($size)
end