gpt4 book ai didi

c++ - GDB 回溯未显示正确信息

转载 作者:太空狗 更新时间:2023-10-29 21:12:42 27 4
gpt4 key购买 nike

我正在学习如何在我的 Mac 上使用 gdb 进行调试,在发现段错误后我想用它来学习。我正在使用来自自制软件的 gdb 8.0.1 和 gcc 7.2.0,我正在使用 -ggdb 进行编译并通过 gdb -ex run ./main 直接从我的 makefile 运行 gdb。

我打开游戏,在其中打开一个菜单,当我尝试关闭它时它崩溃了,因为我在 WindowsObject.cpp 中这样做:

WindowObject_CraftingGrid::~WindowObject_CraftingGrid(){
for (unsigned i = 0; i < gridSlots_.size(); i++) {
for (unsigned j = 0; j < gridSlots_[0].size(); i++) { //i++ instead of j++, this leads to the crash
delete gridSlots_[i][j];
}
}
}

Gdb 说:

(gdb) bt
#0 0x0000000100023a80 in WindowObject_Image::Draw (this=0x300000000) at src/WindowObjects.cpp:620
#1 0x0000000100023ae2 in WindowObject_Image::setImage (this=0x100a9e980, img=0x0) at src/WindowObjects.cpp:629
#2 0x000000010001d5f7 in WindowMain::AddSection (this=0x100a04ce0, n=28672) at src/Window.cpp:263
#3 0x0000000100033765 in LoadLibrary () at src/main.cpp:781
#4 0x0000000100030b25 in DrawGUI () at src/main.cpp:465
#5 0x0000000100031534 in DrawGUI () at src/main.cpp:501
#6 0x00000001006eae27 in ?? ()
#7 0x0000700001875ef0 in ?? ()
#8 0x00007fff40b796d8 in ?? ()
#9 0x0000000000000000 in ?? ()

这是完全错误的,因为它没有指向正确的对象和行,因此对解决错误毫无用处。

我在我的 windows 机器上从 visual studio 中发现了这个错误,因为那里的调用堆栈非常清晰:

project.exe!std::vector<std::vector>WindowObjects_Slot * //Other stuff
project.exe!WindowObject_CraftingGrid::~WindowObject_CraftingGrid() Line 348
project.exe!WindowMain::~WindowMain() Line 234
project.exe!KeyPressed(int KeyCode) Line 566
project.exe!gameloop() Line 181
project.exe!main(int argc, char ** argv) Line 321)

最佳答案

And this is totally wrong

不,它不是:它是您的应用程序实际上在此平台上崩溃的地方。

because it leads to nothing useful to solve the bug

你有一个堆损坏错误。堆损坏错误是这样的:您的应用程序可能会在堆损坏一段时间后任意地方崩溃。

此外,堆栈跟踪并非无用:它告诉您this == 0x300000000,这不是this 的合理值>,因此您正在查看某种堆损坏。

调试类似问题的方法很多:debug malloc , Address SanitizerValgrind其中。

使用 -D_GLIBCXX_DEBUG 构建可启用 debugging mode在 GCC STL 中,并且可能还会直接指出错误。

关于c++ - GDB 回溯未显示正确信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46607525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com