Re: Valgrind (was: TPad::Divide)

From: Rene Brun <Rene.Brun_at_cern.ch>
Date: Wed, 05 Jan 2005 16:51:28 +0100


Hi Christian,

On lxplus, you can use, eg:

/afs/cern.ch/sw/lcg/external/valgrind/2.2.0/rh73_gcc32/bin/valgrind --tool=addrcheck root.exe

Rene Brun

Christian Schmitt wrote:
>
> Hi Rene,
>
> I have a question about valgrind: did you manage to get it running on
> lxplus ? I have installed it but it complains because it cannot allocate
> enough memory:
>
> ===
> ~/public/Valgrind/bin/valgrind --tool=addrcheck /bin/true
> valgrind: mmap(0x80cf000, -1477242880) failed during startup.
> valgrind: is there a hard virtual memory limit set?
> ===
>
> I'm trying to debug a problem with program and root (it crashes only at
> CERN and not at my university so I need to debug it at CERN).
>
> Thanks,
>
> Christian
>
> Rene Brun wrote:
> > Hi Thomas,
> >
> > valgrind is a very nice system that can save you a lot of time discovering
> > things like uninitialized variables, double deletes, showing a profile
> > of the memory use, etc. For more info about valgrind, see:
> > http://valgrind.kde.org/index.html
> >
> > for example to run valgrind on your root.exe application, do:
> > valgrind --tool=addrcheck root.exe
> >
> > Rene Brun
> >
> > Thomas Bretz wrote:
> >
> >>Hi Rene,
> >>
> >>I'm currently working with root 3.10/02. It is not easy to find a simple
> >>script reproducing the problem. I can reproduce it, but not with a
> >>simple program. Otherwise I may already know what the real reason is.
> >>Sorry to ask, but what is 'valgrind'? If it is not too difficult I can try.
> >>
> >>Thomas.
> >>
> >>Rene Brun wrote:
> >>
> >>>Hi Thomas,
> >>>
> >>>What you do should work unless there is very special case connected with signals
> >>>that I do not see.
> >>>Did you check (with a print in the destructor) that your object is deleted
> >>>twice?
> >>>Could you run with valgrind?
> >>>The best would be to send the shortest possible running script reproducing
> >>>the problem. Please indicate your version of ROOT.
> >>>
> >>>Rene Brun
> >>>
> >>>Thomas Bretz wrote:
> >>>
> >>>
> >>>>Dear all,
> >>>>
> >>>>there is something I don't understand.
> >>>>
> >>>>Assume I have created a TCanvas c. I have divided the canvas in two
> >>>>subpads p1 and p2 and these are divided into p11, p12, p21 and p22 using
> >>>>c.Divide(). Now I Draw an object in two different looks (eg
> >>>>Draw("option1"), Draw("option2")) to p11 and p22.
> >>>>Because I don't want to have the owenership of the object I call
> >>>>SetBit(kCanDelete) for it.
> >>>>
> >>>>If I now delete the canvas something - in my opinion - strange happens.
> >>>>Because the two subpads are not in gROOT->GetListOfCleanups() it seems
> >>>>that under some circumstances (which I cannot resolve) p11 _and_ p22 are
> >>>>trying to delete my object and I get a crash. On the other hand the
> >>>>Canvas containing the objects are in the ListOfCleanups and each of the
> >>>>object - when deleted - should call recursiveRemove which should - in
> >>>>all of its subpads - remove the object from all ListOfPrimitves.
> >>>>
> >>>>Simply adding p1 and p2 to the ListOfCleanups solves the Problem. Does
> >>>>somebody have any idea what may go on?
> >>>>
> >>>>There is only one thing else which might be important: The object (in
> >>>>its Draw function) calls
> >>>>
> >>>>gPad->GetCanvas()->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)",
> >>>>"MyClass", this, "EventInfo(Int_t,Int_t,Int_t,TObject*)");
> >>>>
> >>>>I disconnect the Signal in the destructor.
> >>>>
> >>>>Best regards,
> >>>>Thomas.
> >>>
> >>>
> >
Received on Wed Jan 05 2005 - 16:58:13 MET

This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:04 MET