使用gdb" next"跟踪下面的代码,
int main(){
vector<int> a;
a.push_back(28);
}
有人可以告诉我为什么这条线显示了两次吗?
源代码t.cpp是使用
编译的我注意到帖子gdb,why "next" show each source line twice?,但没有回答。
提前致谢!
答案 0 :(得分:5)
因为G ++将对象构造函数的代码分配给与析构函数相同的行,正如“一些程序员老兄”建议的那样。在Compiler Explorer网站上查看生成的程序集。
这可能是因为在离开范围时调用析构函数,这可能导致多个对象在同一行上被销毁。在调试器中多次显示'}'并不是很有用,因为用户无法看到下一个要破坏的对象。
答案 1 :(得分:2)
我遇到了相同的&#34;问题&#34;:该行在调试器中显示两次,因为无论您使用何种调试信息,编译器都会为析构函数生成额外的调试位置(尝试过STABS,DWARF) )或调试级别(尝试最低的-g1)。
但是这种行为可能很有用,因为现在可以进入&#34;进入&#34;析构函数(如果你有调试信息和源代码)。