Bug #10621 2007-03-13 21:56

kirkd

Breakpoints moved, not cleared, or undefined

This is a tough one to reproduce and diagnose, but breakpoints give many problems.

Starting from the beginning, if I set breakpoints, they work fine in debug.

Occassionaly, if I modify code - most likely above my set breakpoint, the breakpoint indicator is on the correct line, however, the breakpoint occurs at a different location.

If I remove a breakpoint (clicking in the left border when breakpoints are indicated by a red dot) will sometimes work and sometimes the breakpoint is not removed. This can occur while I am in debug mode or when I remove the breakpoint during edit mode. It also occurs when setting a new breakpoint.

Occassionally, the debugger will get "stuck" and I'll have to kill the gdb process to free it.

I am currently using build SVN 3455 on Windows XP with GCC.

Category
Application::WrongBehaviour
Group
 
Status
Open
Close date
 
Assigned to
 
kirkd 2007-03-15 15:55
Here's some more detail on the problem:

Here's an example as best as I can describe it.  If I set a breakpoint on line 2 the debugger actually stops there - no problem.  If I then click on Next Line in the debugger menu, you would expect it to go to Line 3, right?  But the file stl_iterator.h opens and I'm on line 603:

__normal_iterator(const _Iterator& __i) : _M_current(__i) { }

Next line then goes to line 666 in this file.  Next Line then opens stl_vector.h at line 375.  Next Line then ends up in my code corresponding to the call from line 194.  Next Line then goes to line 195.  I then make excursions through stl_iterator.h, stl_vector.h, new_allocator.h, basic_string.h.

If I then put a breakpoint on line 241, it is ignored.  Also, a breakpoint on line 245 is ignored despite the fact that the conditional on line 241 is guaranteed to succeeed.

To get the debugger to stop on line 245, I have to stop the debugger, clear higher breakpoints, put a breakpoint on line 245, and restart in Debug mode.  Next Line then follows this sequence of lines:  245, 246, 251, 245, 251, 252, another .h file of mine UNRELATED to Line 252 and not having any breakpoints set, 251, yet another file of mine with no breakpoints set, 252, a long excursion thorugh other files of mine unrelated to line 252, and eventually settling on line 81.

What is going on here???

[code]
1	PowerUpControllers = *(m_pWorld->GetPowerUpControllers());
2	    for (index = 0; index < PowerUpControllers.size(); index++)
3	    {
4	        if ( Params.GetLongParam("PowerUpXY") == 1 )
5	        {
6	            PowerUpControllers.at(index)->GetPosition(X,Y);
7	            inputs.push_back(X/16);
8	            inputs.push_back(Y/16);
9	        }
10	        if ( Params.GetLongParam("PowerUpState") == 1 )
11	        {
12	            PowerUpControllers.at(index)->GetState(state);
13	            inputs.push_back(state);
14	        }
15	    }
16	
17	    m_pWorld->GetPacManController()->GetPosition(X,Y);
18	    if ( Params.GetLongParam("PacManXY") == 1 )
19	    {
20	        inputs.push_back(X/16);
21	        inputs.push_back(Y/16);
22	    }
23	
24	    if ( Params.GetLongParam("CheckForWalls") == 1 )
25	    {
26	        if ( m_pWorld->GetMazeController()->CheckMapByPixels(X,X+31,Y-8,(Y-8)+31) )
27	            inputs.push_back(0);  //nothing in the up direction
28	        else
29	            inputs.push_back(1);  //a wall is in the way
30	
31	        if ( m_pWorld->GetMazeController()->CheckMapByPixels(X,X+31,Y+8,(Y+8)+31) )
32	            inputs.push_back(0);  //nothing in the down direction
33	        else
34	            inputs.push_back(1);  //a wall is in the way
35	
36	        if ( m_pWorld->GetMazeController()->CheckMapByPixels(X-8,(X-8)+31,Y,Y+31) )
37	            inputs.push_back(0);  //nothing in the left direction
38	        else
39	            inputs.push_back(1);  //a wall is in the way
40	
41	        if ( m_pWorld->GetMazeController()->CheckMapByPixels(X+8,(X+8)+31,Y,Y+31) )
42	            inputs.push_back(0);  //nothing in the right direction
43	        else
44	            inputs.push_back(1);  //a wall is in the way
45	    }
46	
47	    //use the starting variables to limit the number of times we check the dot content
48	    if ( Params.GetLongParam("CheckDots") == 1 )
49	    {
50	        if ( abs(StartingX - X) > 32 || abs(StartingY - Y) > 32 )
51	        {
52	            StartingX = X;
53	            StartingY = Y;
54	
55	            //only update the number of dots every 8 steps
56	            //profiling suggested this would be a good place to save computation time
57	            rct.top = 0;
58	            rct.bottom = (Y+31)/16;
59	            rct.left = 0;
60	            rct.right = m_pWorld->GetDotController()->GetWidth()-1;
61	            DotsUp = m_pWorld->GetDotController()->CountTilesOfType(rct, 1);
62	
63	            rct.top = (Y/16);
64	            rct.bottom = m_pWorld->GetDotController()->GetHeight()-1;
65	            DotsDown = m_pWorld->GetDotController()->CountTilesOfType(rct, 1);
66	
67	            rct.top = 0;
68	            rct.right = (X+31)/16;
69	            DotsLeft = m_pWorld->GetDotController()->CountTilesOfType(rct, 1);
70	
71	            rct.left = (X/16);
72	            rct.right = m_pWorld->GetDotController()->GetWidth()-1;
73	            DotsRight = m_pWorld->GetDotController()->CountTilesOfType(rct, 1);
74	        }
75	
76	        //push the number of dots in
77	        inputs.push_back( DotsUp );
78	        inputs.push_back( DotsDown );
79	        inputs.push_back( DotsLeft );
80	        inputs.push_back( DotsRight );
81	    }
[/code]