This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: problems with list...


On Wed, Sep 11, 2002 at 05:29:46PM -0700, Craig Maloney wrote:
> Hi all.
> 
> I've been having problems using list functions inside of gdb.
> 
> -----------------------------------
> #include <list>
> #include <vector>
> 
> using namespace std;
> 
> main(){
>  list<int> l;
>  vector<int> v;
>  l.push_back(0);
>  l.push_back(1);
>  v.push_back(0);
>  v.push_back(1);
> 
> }
> --------------------------------------------
> 
> if I try:
> "p l.size()"
> 
> I get a "Cannot evaluate function -- may be inlined"  even if I compile 
> with an -fno-inline.
> "ptype l" gives something reasonable which shows "size_t size() const;"
> 
> None of the same problems with the vector.
> 
> Does anyone have any idea why this doesn't work?

Craig,

Sorry this reply is late - I missed your message.  You've hit a
fundamental problem of debugging C++ templates.  Because
std::list<int>::size() is never called by the program, it is never
instantiated, and thus it doesn't exist for GDB to call it.

On the other hand, I'll bet that the implementation of v.push_back()
references v.size(); that's logical for a vector.

If you include an explicit call to l.size() in the program somewhere,
then GDB calls the method properly.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]