如何使用gdb按名称显示vtable
How to display a vtable by name using gdb
在有崩溃转储的地方进行调试时,vtable指针是内存中对象的良好指标。
我想在gdb中做的是能够通过做之类的事情来查询vtable
info address 'vtable for Bar'
然而,我找到的唯一方法(不需要对象的有效实例)是使用vtable的损坏名称。
示例:
info address _ZTV3Bar
尝试找出vtable损坏的名称并不是世界末日,但这是一个烦恼(即使用objdump-t myexecutable)。
有人知道一种方法吗?我可以用一种不那么痛苦的方式找到一个类型的vtable地址(而不需要该类型的有效实例)
-规则:不能要求有问题对象的有效实例,也不能在对象中找到vtable指针。
使用信息变量:
条形的信息变量vtable
显示关于对象的虚拟方法表(vtable)的信息
语法
info vtbl [Expression]
参数
表达式指定一个表达式,该表达式将被求值以获取指向应显示虚拟方法表的对象的指针。
这是违反规则的。
这些是什么规则?
我没有对象的实例,只是想找到该类型的vtable。
但你做到了:
set print object on
print *(Bar*) 0x123456
这将尝试在0x123456处打印对象,就好像它是Bar
或从Bar
派生一样。如果该位置的对象实际上是从Bar
派生的,那么GDB将推导派生类型,并打印其成员。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 显示基于用户输入的整数的字符
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 如何使用gdb按名称显示vtable
- 如何通过GCC显示C++类的VTABLE