LLVM と KLEE で開発を行っていますが、gdb で問題が発生しています。-O0
およびargs を使用してすべてをコンパイルし-ggdb
、最適化を取り除き、デバッグ シンボルを追加しました。c コードのデバッグに gdb を何度も使用しましたが、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 を使用していました。