c++ - gdb 继续而不是步进

标签 c++ gdb

我正在使用 LLVM 和 KLEE 进行一些开发,但在使用 gdb 时遇到了一些问题。我用 -O0-ggdb args 编译了所有内容,以摆脱优化并添加调试符号。我曾多次使用 gdb 来调试 c 代码,但这是我第一次在 c++ 上使用它。

当我尝试使用 gdb 进行调试时,一切正常,除了“下一个”命令有时会“继续”而不是转到下一个源代码行。调试器总是在断点处停止,但它似乎决定跳过许多行而不是下一个...例如我可能有类似的东西:

int foo::bar(list_class<int> &list, int num){

    int i;
    num = num + 3;

    for(i = 0; i < 5; i++){
        list.add(num + i);
    }

    num = num + 42;
    return num;
}

如果我打破这条线:

num = num + 42;

我从一行“下一个”

num = num + 3;

它将完全跳过 for 循环并在断点处停止。如果我不在该行上设置中断,该函数将返回。如果我在线上设置一个断点:

list.add(num + i);

程序会一直停在断点处。有没有人有什么建议?提前致谢。

编辑:

这是 gdb 抛给我的一些错误。我不确定它们是否与问题有关。

warning: can't find linker symbol for virtual table for `std::basic_string<char, std::char_traits<char>, std::allocator<char> >' value
warning: can't find linker symbol for virtual table for `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider' value
warning: can't find linker symbol for virtual table for `std::_Rb_tree_node_base' value
warning:   found `klee::PTree::PTree(klee::ExecutionState* const&)' instead
warning: can't find linker symbol for virtual table for `klee::KInstIterator' value
warning:   found `klee::Executor::runFunctionAsMain(llvm::Function*, int, char**, char**)' instead
warning: can't find linker symbol for virtual table for `klee::TreeOStream' value
warning:   found `std::string::compare(char const*) const' instead
warning: can't find linker symbol for virtual table for `klee::ImmutableMap<klee::MemoryObject const*, klee::ObjectHolder, klee::MemoryObjectLT>' value
warning:   found `bool std::operator==<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)' instead
warning: can't find linker symbol for virtual table for `klee::ImmutableTree<klee::MemoryObject const*, std::pair<klee::MemoryObject const*, klee::ObjectHolder>, klee::_Select1st<std::pair<klee::MemoryObject const*, klee::ObjectHolder>, klee::MemoryObject const*>, klee::MemoryObjectLT>' value
warning:   found `bool std::operator==<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)' instead

编辑#2(已解决)

我通过升级到最新版本的 gdb (7.4) 解决了我的问题。我使用的是 7.1-ubuntu 版本。

最佳答案

我通过升级到最新版本的 gdb (7.4) 解决了我的问题。我使用的是 7.1-ubuntu 版本。

关于c++ - gdb 继续而不是步进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129379/

相关文章:

c++ - 不同命名空间 C++ 中类的循环依赖

c++ - Visual Studio 15 - 重命名错误 : No References were found in the selected scope

c++ - Visual Studio npcc64_60.dll 陷阱?

c++ - 使用 Float 或 Double 类型时不显示小数

c - -fno-builtin 的 MinGW gcc malloc 问题

gdb 不间断地附加到进程

c++ - 是否只有当调用堆栈中存在某个方法时才可以在断点处中断?

debugging - 如何将调试符号添加到剥离的 ELF 二进制文件

c++ - const 成员函数的 std 函数包装

gdb - 当没有可用符号时,如何使用 gdb 读取二进制文件?