簡體   English   中英

我的GDB有問題嗎?

[英]Is there something wrong with my GDB?

我的程序掛起硬盤 (近了凍結我的整個電腦),我試圖找出在它的發生。 我已經閱讀了一些gdb教程和其他內容,並且很好地遵循了它們。 但是,每當我看到gdb輸出時,它就一定是干凈的和可讀的(也就是說,它的輸出似乎至少與它正在調試的文件有關)。

這是我的gdb輸出的一部分:

23  std::map<std::string, int> Item::getStats() { return enhancements_; };
(gdb) step
Python Exception <class 'ValueError'> Cannot find type const std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >::_Rep_type: 
map (__x=std::map with 2 elements, this=0x7fffffffd0c0)
    at src/item.cpp:23
23  std::map<std::string, int> Item::getStats() { return enhancements_; };
(gdb) step
_Rb_tree (__x=..., this=0x7fffffffd0c0) at src/item.cpp:23
23  std::map<std::string, int> Item::getStats() { return enhancements_; };
(gdb) step
_Rb_tree_impl (__a=<optimized out>, __comp=..., this=0x7fffffffd0c0)
    at /usr/include/c++/4.9/bits/stl_tree.h:474
474         _M_header(), _M_node_count(0)
(gdb) step
475       { _M_initialize(); }
(gdb) step
_M_initialize (this=0x7fffffffd0c0)
    at /usr/include/c++/4.9/bits/stl_tree.h:484
484         this->_M_header._M_left = &this->_M_header;
(gdb) 
485         this->_M_header._M_right = &this->_M_header;
(gdb) step
_Rb_tree (__x=..., this=0x7fffffffd0c0)
    at /usr/include/c++/4.9/bits/stl_tree.h:674
674     if (__x._M_root() != 0)
(gdb) step
_M_root (this=0x7fffffffd038)
    at /usr/include/c++/4.9/bits/stl_tree.h:498
498       { return this->_M_impl._M_header._M_parent; }

我的gdb有什么問題嗎?或者這通常是應該如何讀取的? 我看不到其他頭文件或main.cpp之外的代碼中的任何內容。 以上三行似乎與我的代碼完全沒有關系。

編輯:我正在Ubuntu 14.04 w / Python 2.7.6上使用G ++ 4.9.2和GDB 7.7.1

“ where”的輸出為:

(gdb) where
#0  _int_malloc (av=0x7ffff7840760 <main_arena>, bytes=48) at malloc.c:3775
#1  0x00007ffff75047b0 in __GI___libc_malloc (bytes=48) at malloc.c:2891
#2  0x00007ffff7aebf18 in operator new(unsigned long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00000000004016f7 in allocate (__n=1, this=0x7fffffffd0c0) at /usr/include/c++/4.9/ext/new_allocator.h:104
#4  allocate (__n=1, __a=...) at /usr/include/c++/4.9/bits/alloc_traits.h:357
#5  _M_get_node (this=0x7fffffffd0c0) at /usr/include/c++/4.9/bits/stl_tree.h:385
#6  _M_create_node<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> const&> (this=0x7fffffffd0c0)
    at /usr/include/c++/4.9/bits/stl_tree.h:417
#7  _M_clone_node (__x=0xa7b82fa0, this=0x7fffffffd0c0) at /usr/include/c++/4.9/bits/stl_tree.h:445
#8  std::_Rb_tree<std::string, std::pair<std::string const, int>, std::_Select1st<std::pair<std::string const, int> >, std::less<std::string>, std::allocator<std::pair<std::string const, int> > >::_M_copy (this=this@entry=0x7fffffffd0c0, __x=0xa7b82fa0, __p=0xa7b82fa0, 
    __p@entry=0x7fffffffd0c8) at /usr/include/c++/4.9/bits/stl_tree.h:1219
#9  0x0000000000401cc5 in _Rb_tree (__x=..., this=0x7fffffffd0c0) at /usr/include/c++/4.9/bits/stl_tree.h:676
Python Exception <class 'ValueError'> Cannot find type const std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >::_Rep_type: 
#10 map (__x=std::map with 2 elements, this=0x7fffffffd0c0) at /usr/include/c++/4.9/bits/stl_map.h:183
#11 Item::getStats (this=0x7fffffffd020) at src/item.cpp:23
#12 0x00000000004011a5 in main () at src/main.cpp:26

我可以在堆棧中上下移動,回溯,設置中斷以及類似的操作,但是所有輸出的格式都相似。 我期望看到一些更干凈的東西,與我調試的代碼更相關。 類似於教程中的內容:

Breakpoint 1, LinkedList<int>::remove (this=0x40160, 
    item_to_remove=@0xffbef014) at main.cc:52
52      Node<T> *marker = head_;
(gdb) step
53      Node<T> *temp = 0;  // temp points to one behind as we iterate
(gdb) 
55      while (marker != 0) {
(gdb) 
56        if (marker->value() == item_to_remove) {
(gdb) 
Node<int>::value (this=0x401b0) at main.cc:30
30    const T& value () const { return value_; }
(gdb) 
LinkedList<int>::remove (this=0x40160, item_to_remove=@0xffbef014)
    at main.cc:75
75        marker = 0;  // reset the marker
(gdb) 
76        temp = marker;
(gdb) 
77        marker = marker->next();
(gdb) 
Node<int>::next (this=0x0) at main.cc:28
28    Node<T>* next () const { return next_; }
(gdb) 

Program received signal SIGSEGV, Segmentation fault.
Node<int>::next (this=0x0) at main.cc:28
28    Node<T>* next () const { return next_; }
(gdb)

相比之下,我的似乎難以理解。

我不知道為什么您的程序會凍結整個計算機,但是問題很明顯在這里:

75        marker = 0;  // reset the marker
76        temp = marker;
77        marker = marker->next();

如果您忽略第76行,而只是閱讀代碼,則顯然是錯誤的。 也許您打算寫:

marker = marker->next();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM