我在gdb调试器中调试一个C++程序,并试图访问vector中的第5个元素,它只包含4个元素.try 后,屏幕上出现了此错误:

(gdb) list main
1   #include <memory>
2   #include <vector>
3   
4   int main(int argc, char *argv[]){
5   
6   
7       std::vector<int> v_num = {1, 3, 5, 67};
8       std::unique_ptr<std::vector<int>> p(&v_num);
9   
10  
(gdb) p v_num.at (5)
Python Exception <class 'IndexError'> Vector index "5" should not be >= 4.: 
Error while executing Python code.
(gdb) 

我只看到gdb中出现了Python异常.有人能解释一下我为什么会遇到这样的错误吗?gdb在内部使用python吗?

推荐答案

gdb在内部使用python吗?

是的,它大量使用Python在许多方面进行扩展,参见https://sourceware.org/gdb/onlinedocs/gdb/Python.html#Python.

您发现的被称为Python Xmethods,请参阅https://sourceware.org/gdb/onlinedocs/gdb/Xmethods-In-Python.html.Xmethods用于替换C++源代码中定义的内联或优化输出方法.libstdc++有许多用于标准容器的xmethod.您可以使用info xmethod命令看到它们.对于std::vector,我的盒子上定义了6种X方法:

  libstdc++::vector
    size
    empty
    front
    back
    at
    operator[]

您可以使用disable xmethod命令禁用所有xmethods.如果您这样做,GDB将无法调用at方法:

(gdb) p v_num.at (5)
Cannot evaluate function -- may be inlined

Python相关问答推荐

如何在PIL、Python中对图像应用彩色面膜?

如何销毁框架并使其在tkinter中看起来像以前的样子?

Odoo -无法比较使用@api.depends设置计算字段的日期

通过仅导入pandas来在for循环中进行多情节

具有多个选项的计数_匹配

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

Pydantic 2.7.0模型接受字符串日期时间或无

Python上的Instagram API:缺少client_id参数"

Python 约束无法解决n皇后之谜

运行终端命令时出现问题:pip start anonymous"

为什么这个带有List输入的简单numba函数这么慢

在ubuntu上安装dlib时出错

改进大型数据集的框架性能

当我try 在django中更新模型时,模型表单数据不可见

如何在turtle中不使用write()来绘制填充字母(例如OEG)

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

在matplotlib中删除子图之间的间隙_mosaic

matplotlib图中的复杂箭头形状

合并相似列表

如何获得满足掩码条件的第一行的索引?