2016-08-07 4 views
0

-gdwarf-2으로 컴파일하는 것이 좋습니다이 문제점에 대한 이전 솔루션을 찾았지만이 솔루션은 더 이상 작동하지 않거나 더 이상 작동하지 않습니다.GDB/DDD 기호 없음 <var> 현재 컨텍스트

g++ -g -O0 -gdwarf-2 test.cpp; ddd. ./a.out 
: 내가 사용

int main() 
{ 
    for (int i = 0; i < 10; ++i) 
    { 

    } 
} 

명령이 있습니다 :

그래서, 컴파일 된 파일에 ddd를 실행 한 후 더블 클릭 변수는 항상 오류가 발생 no symbol <var> in current context

내 프로그램은 이것이다

프로그램의 버전 :

ddd: GNU DDD 3.3.12 (x86_64-pc-linux-gnu) 
gdb: GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 
gcc: gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 

어떻게하면됩니까?

+0

이 사용하는'-ggdb' 대신 고려

ddd ./test.exe 

에 ddd를 달렸다 ; 나는 일반적으로'-ggdb3'을 사용합니다 (-g를 암시하므로 하나의 옵션 만 필요합니다). -g3을 사용하면 많은 양의 추가 세부 정보로 인해 실행 가능한 크기가 상당히 커집니다. – kfsone

+0

기다려라. 그래서'g ++ -ggdb -O0 program.cpp'? 그것은 그것을 고치지 않았다. –

답변

1

변수를 인쇄/표시하려면 변수가 범위 내에 있어야하므로 로컬 변수/매개 변수의 경우 해당 범위의 중단 점에 있어야한다는 의미입니다.

예제 프로그램에서 ddd를 시작하고 즉시 i을 인쇄/표시하려고하면 나타나는 오류를 재현 할 수 있습니다.

일단 내가 for 줄에 중단 점을 설정하고 프로그램을 실행하면 예상대로 인쇄/표시 할 수 있습니다.

나는 컴파일 :

g++ -Wall -O0 -ggdb -o test.exe test.cpp 

하고 GDB/DDD로 디버깅하기 때문에 내가

GNU DDD 3.3.12 (x86_64-pc-linux-gnu) 
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1 
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.1) 
+0

그랬습니다. 디스플레이 변수 기능을 사용하는 방법을 잘못 이해 한 것 같습니다. –

0

컴파일 플래그에서 -gdwarf-2를 제거하려고 했습니까? 이전 디버거가있는 시스템에서 새 컴파일러를 사용하면 비슷한 문제가 발생했습니다. 그런 다음 컴파일러에서 사용하는 기본 디버그 기호 형식이 디버거에 비해 너무 새롭고 컴파일러에서 이전 형식을 사용하도록해야했습니다. 디버거가 최근에 업데이트 된 경우 비슷한 수 있습니다.

+0

예,'-gdwarf-2'없이 시도했습니다. 나는 그 문제에 대한 해결책을 찾고있는 그 깃발만을 발견했다. –

+0

여전히 -g 플래그를 유지하고 있습니까? –

+0

예. 11 more to go –