2012-04-16 2 views
7

gdb-7.0.1을 사용 중이고 에 for 루프가있는 코드의 특정 섹션에서 버그를 발견했다고 생각합니다. end 매우 큰 정수 여기 gdb의 특정 반복 횟수까지

for (int i=0 ; i< end ; ++i) 
{ 
    //Code here. 
} 

것처럼 for 루프 보인다. 코드는 첫 번째 반복에서 충돌하지 않으며 반복 번호 end/2에서 어딘가에 충돌하는 것 같습니다. 나는이 반복 지점에 도달까지 i=0에서 반복 수 end/2, 단지 steppingnexting에서 코드의 행동을 이해하려는 때문에

는 실행할 수없는 것입니다.

후 수동으로 반복 번호 end/2를 단계별로 할 수있는 사용자에 대한 값 end/2 기다려야됩니다 i까지 for 루프를 통해 계속 gdb을 알 수있는 방법이 있나요? 나는 우분투 리눅스에 gcc-4.5.2을 사용하고

+0

http://blog.vinceliu.com/2009/07/gdbs-conditional-breakpoints.html –

답변

5

중단 점을 설정하면 중단 점 번호가 부여됩니다 (잠시 후 1이라고 가정 해 봅시다). 그런 다음 중단 점을 조건부로 만듭니다.

condition 1 i==end/2 
1

당신은 거기에 if (i == (end/2 -1)) { Foo; } 다음 거기에서 스테핑 계속할 수 있도록 할 푸에 중단 점을 설정 배치 할 수 있어야한다.

+0

+1 @LuchianGrigore가 제안하는 조건부 중단 점을 찾을 때까지이 방법이 내 방법이었습니다. –

+0

고마워, 나는 gdb에 익숙하지가 않았다. 나는 그것이 더 신랄한 것들에도 불구하고 그것을 떠날 수있는 충분히 일반적인 해결책이라고 생각했다. –

6

다음은 gdb와 함께 conditional breakpoints에 대한 자습서입니다.

나는 당신이이 용어를 모른다고 생각하고있다. 그렇지 않으면 구글에 쉬울 것이다.

+0

또 다른 대안은'(gdb)가 end/2-1'을 무시하는 것입니다. –

1

경우 breakpoint 솔루션은 매우 느릴 수 있습니다 - gdb는 매번 루프를 반복하여 조건을 평가해야합니다. 이 당신을 위해 문제가 있다면,이 트릭을 사용할 수 있습니다

for (int i=0 ; i< end ; ++i) 
{ 
    if (i == end/2) 
     i %= end ; // This has no effect, but lets you set a breakpoint here 
    //Code here. 
} 

을 나는이에게 또 다른 해결책이 중단 점에 스킵 카운트를 설정하는 것입니다

:-) 모든 시간을. Qt 환경에서 gdb를 사용하기 때문에 gdb 구문을 사용할 수 없습니다. 그러나 조건을 설정하는 것보다 빠릅니다.