[ODE] ODE debugging dSolveLCP

Erkin Bahceci erkinb at ceng.metu.edu.tr
Fri Feb 11 09:04:14 MST 2005


Hi,
We also had some errors regarding dSolveLCP, which were (as we later found out)
caused by high stack size requirements of dWorldStep. The application crashed
when number of collisions reached a certain number. Using dWorldQuickStep instead
fixed the problem in our case. Or you can alternatively increase stack size, but the
same problem may arise at some higher-collision situation again.



On 08 Feb 2005 19:23 EET you wrote:

> Hi.
> 
> I'm a new subscriber and I have some problems that I hope somebody could 
> solve.
> 
> I was doing some memory debugging with valgrind on my program, and I've 
> got a strange warning / error coming from a ODE library.
> 
> Could somebody please explain me if it's a really dangerous problem? It 
> seems to come from the dSolveLCP function.
> I attach the lines I received from valgrind and GDB.
> 
> Thanks
> M.
> 
> 
> Valgrind Output during normal execution (no segmentation fault yet):
> 
> ==21128== Use of uninitialised value of size 8
> ==21128==    at 0x80AA15D: swapProblem(double**, double*, double*, 
> double*, double*, double*, int*, int*, int*, int, int, int, int, int) 
> (lcp.cpp:240)
> ==21128==    by 0x80AAA6C: dLCP::dLCP(int, int, double*, double*, 
> double*, double*, double*, double*, double*, double*, double*, double*, 
> double*, int*, int*, int*, int*, double**) (lcp.cpp:792)
> ==21128==    by 0x80AC3CF: dSolveLCP(int, double*, double*, double*, 
> double*, int, double*, double*, int*) (lcp.cpp:1137)
> ==21128==    by 0x80A5CD8: dInternalStepIsland_x2(dxWorld*, dxBody* 
> const*, int, dxJoint* const*, int, double) (step.cpp:835)
> 
> The problem recognised by valgrind is then passed to gdb, that gives the 
> following lines:
> 
> 0x080aa15d in swapProblem (A=0x52be9830, x=0x52bf14e0, b=0x52bf16d0, 
> w=0x52bf12f0, lo=0x52bfc800, hi=0x52bfc610, p=0x52be9730, state=0x52be9530,
>      findex=0x52bfc514, n=59, i1=5, i2=6, nskip=60, do_fast_row_swaps=0) 
> at ode/src/lcp.cpp:240
> 240       tmp = w[i1];
> 
> 
> 
> 
> 
> When a Segmentation Fault occurs in my program, most of the time this is 
> the gdb output:
> 
> #0  0x080ac35f in dSolveLCP(int, double*, double*, double*, double*, 
> int, double*, double*, int*) (n=353, A=0xbfeeced0, x=0xbfeeae00, 
> b=0xbfeeb920,
>      w=0xbfeea2e0, nub=15, lo=0xbfff97d0, hi=0xbfff8cb0, 
> findex=0xbfff8714) at ode/src/lcp.cpp:1137
> 1137      dLCP lcp 
> (n,nub,A,x,b,w,lo,hi,L,d,Dell,ell,delta_w,state,findex,p,C,Arows);
> 
> #1  0x080a5cf1 in dInternalStepIsland_x2(dxWorld*, dxBody* const*, int, 
> dxJoint* const*, int, double) (world=0x8146890, body=0xbffff030, nb=42,
>      _joint=0xbfffebd0, nj=85, stepsize=0.0025000000000000001) at 
> ode/src/step.cpp:835
> 835         dSolveLCP (m,A,lambda,rhs,residual,nub,lo,hi,findex);
> 
> 
> _______________________________________________
> ODE mailing list
> ODE at q12.org
> http://q12.org/mailman/listinfo/ode
> 



More information about the ODE mailing list