4

在 GDB 中调试时是否可以打印双精度向量的总和?我知道向量的值可以通过 *(vec._M_impl._M_start)@N 打印,但我只想对巨大的数组求和,可以做什么?一种解决方案是编写 C++ 函数并在 GDB 中调用它。还有其他更简单的解决方案吗?

4

1 回答 1

1

它可以通过 gdb 脚本完成,但我认为编写 c++ 函数并调用它是更好的解决方案。

尽管如此,该脚本(通过使用STL 支持工具并对其进行修改创建)是这样的:

define pvecsum
    set $sum = 0
    set $size = $arg0._M_impl._M_finish - $arg0._M_impl._M_start
    if $argc == 1
        set $i = 0
            while $i < $size
                set $sum = $sum + *($arg0._M_impl._M_start + $i)
                set $i++
            end
        end
    printf "sum of elements: %f\n", $sum
end

因此,您需要通过gdb -x abovesctipt.gdb myexecutable之类的方式启动 gdb ,然后打印 sum do pvecsum name_of_vector

免责声明:我不知道打印结果与类似 c++ 函数获得的结果有多接近。

于 2013-10-21T09:41:04.017 回答