This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: problems with list...
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: Craig Maloney <cmaloney at physics dot ucsb dot edu>
- Cc: gdb at sources dot redhat dot com
- Date: Sat, 1 Mar 2003 11:57:42 -0500
- Subject: Re: problems with list...
- References: <3D7FDFFA.9060902@physics.ucsb.edu>
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