【发布时间】:2014-07-30 13:44:42
【问题描述】:
double var1, var2;
std::vector<double *> x;
var1 = 1;
var2 = 2;
x.push_back(&var1);
x.push_back(&var2);
当我在 gdb 中调试此代码并尝试 print x[0] 或 *x[0] 时,我得到:
找不到运算符[]。
现在,如果我在 push_back 之后加入这一行:
x[0] = &var1;
我可以访问 gdb 中的任何特定元素。其他成员也会发生同样的事情,例如front()、at() 等。我的理解是编译器/链接器仅包含源代码中存在的成员函数,而那些是我可以在 gdb 中使用的成员函数。有没有办法包含std::vector 的每个成员函数,以便我可以在 gdb 中访问它们?
【问题讨论】:
-
关闭优化?
-
我不确定如何阻止编译器/链接器从可执行文件中剥离
[]运算符代码,但请查看此答案以了解潜在的解决方法:stackoverflow.com/questions/253099/… -
@Qix 我只有 -g -Wall on
-
它没有被“剥离”,因为它从未添加。据我回忆(是的,它很粗略;你知道的星期一),该运算符不是虚拟的,如果没有使用,也不会扩展给定类型的实现。但是,您可能可以明确地强制它,尽管我承认从未尝试过。
-
这能回答你的问题吗? Forcing the compiler to generate code for all member functions of a template class? {请注意,每个问题中都有一些未包含在另一个问题中的答案。}