Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么GDB“next”两次显示构造函数行?_C++_C++11_Gdb - Fatal编程技术网

C++ 为什么GDB“next”两次显示构造函数行?

C++ 为什么GDB“next”两次显示构造函数行?,c++,c++11,gdb,C++,C++11,Gdb,当使用gdb跟踪下面的代码时 int main(){ vector<int> a; a.push_back(28); } 第二行向量a显示两次。 请看屏幕截图 有人能告诉我为什么这条线显示了两次吗 源代码t.cpp是使用 g++-g-std=c++11 t.cpp, 在Ubuntu 16.04 LTS上 使用g++Ubuntu 5.4.0-6ubuntu1~16.04.4 5.4.0 20160609 我注意到了帖子,但没有人回答 提前谢谢 因为G++将对象构造函数

当使用gdb跟踪下面的代码时

int main(){
    vector<int> a;
    a.push_back(28);
}
第二行向量a显示两次。 请看屏幕截图

有人能告诉我为什么这条线显示了两次吗

源代码t.cpp是使用

g++-g-std=c++11 t.cpp, 在Ubuntu 16.04 LTS上 使用g++Ubuntu 5.4.0-6ubuntu1~16.04.4 5.4.0 20160609 我注意到了帖子,但没有人回答


提前谢谢

因为G++将对象构造函数的代码分配给与其析构函数相同的行,正如“一些程序员”所建议的那样。在网站上查看生成的程序集


这可能是因为在离开作用域时调用析构函数,这可能导致在同一行上销毁多个对象。在调试器中多次显示“}”并没有多大帮助,因为用户看不到下一步要销毁哪个对象。

因为G++将对象构造函数的代码分配给与其析构函数相同的行,就像“一些程序员”建议的那样。在网站上查看生成的程序集


这可能是因为在离开作用域时调用析构函数,这可能导致在同一行上销毁多个对象。在调试器中多次显示“}”没有多大帮助,因为用户看不到下一步要销毁哪个对象。

我遇到了同样的问题:该行在调试器中显示两次,因为编译器会为析构函数生成一个额外的调试位置,而不管您使用的调试信息是什么,DWARF或调试级别尝试了最低的-g1


但是这种行为可能是有用的,因为现在如果你有了析构函数的调试信息和源代码,就可以在析构函数中执行一步。

我遇到了同样的问题:该行在调试器中显示两次,因为编译器为析构函数生成了一个额外的调试位置,不管您使用的调试信息是什么,Drawer还是调试级别都是最低的-g1


但是这种行为可能是有用的,因为如果您有调试信息和源,现在就可以进入析构函数。

是否可能与函数返回时调用析构函数有关?您可能需要检查生成的机器代码,以查看程序的功能。是否可能与函数返回时调用的析构函数有关?您可能希望检查生成的机器代码以查看程序的功能。是否可以防止GDB第二次显示源代码?调试很烦人。有可能阻止GDB第二次显示源代码吗?调试很烦人。