我正在LLVM和KLEE中进行一些开发,我在使用gdb时遇到了一些麻烦。我用-O0
和-ggdb
args编译了所有内容,以摆脱优化并添加调试符号。我已多次使用gdb来调试c代码,但这是我第一次在c ++上使用它。
当我尝试使用gdb进行调试时,一切正常,除了“next”命令有时“继续”而不是转到下一个源代码行。调试器总是在断点处停止,但它似乎决定跳过许多行而不是下一个...例如我可能有类似的东西:
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版本。
答案 0 :(得分:0)
我通过升级到最新版本的gdb(7.4)解决了我的问题。我使用的是7.1-ubuntu版本。