2009-09-01 2 views
0

이미지 처리에 C++의 많은 부분을 사용하는 iPhone 프로젝트를 작성/디버깅하고 있습니다. Xcode에서 gdb를 사용할 때마다 문제가 발생합니다. 왜냐하면 값을 프린트 할 때마다 실제 값 ( cout << "width" << width << endl;)을 320으로 출력하고 gdb에서
print width
을 출력하면 값을 얻습니다. like 805300460)Xcode GDB에서 C++로 인쇄하면 정확한 값이 출력되지 않습니다.

나는 메모리를 덮어 쓰고 있다고 생각하지 않기 때문에 프로그램이 아니라 gdb에서 문제가 있다고 생각한다. stdout에 인쇄 된 값이 정확한 것 같다. 언어는 자동으로 C++로 설정됩니다.

이에서 보면이 컴파일러 플래그를 추가하면 -gdwarf-2가 도움이 될 것 같습니까? 그렇게 할 곳이 확실하지 않습니다.

누구나이 문제가 발생합니까? 어떤 아이디어있어?

답변

1

빠른 검사에서 어떤 최적화를 사용하고 있습니까? 만약 당신이 어떤 것을 사용하고 있다면, 값이 레지스터에 저장되고 메모리에 쓰여지지 않을 가능성이 있기 때문에, 메모리에 있던 값이 무엇이든 얻을 수 있습니다. 이 경우 iostream을 통해 정답을 얻을 수 있습니다. 컴파일러는 관찰 가능한 동작을 언어가 말하는 것과 일치시켜야하지만 gdb는 뒤에서 보입니다. gdb를 시도에서

+0

프로젝트> 프로젝트 설정 편집> 빌드> 최적화 수준에서 "가장 빠름, 최소"[-Os]로 설정되었습니다. 나는 이것을 None [-O0]으로 바꾸었고 여전히 운이 없다. 답변을 주셔서 감사합니다! – Andres

1

:

p /d width 

아마도 인코딩이 다르다.

"왜소한"매개 변수가 도움이 될 것이라고 생각하지 않습니다. Dwarf 매개 변수는 컴파일하는 동안 중간 코드를 소스 코드로 설명합니다. 기본적으로 컴파일 단계에서 소스 코드를 보존하려고합니다. gdb에서는 소스 코드의 행 번호를 2 진수로 일치시킬 수 있습니다. 그 문제는 변수와 관련이 없어야합니다.

+0

또한 시도했지만 운이없는 경우 :(. 제안을 주셔서 감사합니다! 다른 것을 생각할 수 있으면 알려주세요. – Andres

+0

C로 시도해보십시오 + + : int a 12345; ..cout << hex << a << endl; gdb의 경우 : p/x 동일한 값을 반환해야합니다. – name

+0

다른 값을 반환합니다. int a = 1234; cout << hex << a << endl; 4d2를 출력합니다. p/x a는 0x0을 출력합니다 (그다지 좋은 부호는 아닙니다). 수정되지 않은 오픈 소스 프로젝트를 시도해 보았는데 제대로 작동하는 것 같아서 일종의 설정 인 것 같습니다. Xcode에서 gdb 설정을 재설정하는 방법이 있습니까? – Andres

0
다음 GDB 버전을 사용하는 동안 나는 비슷한 문제가 있었다

:

는 i686-사과 darwin9-g ++ - 4.0.1 (GCC) 4.0.1 저작권 (애플사가 5493을 구축) (

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44731

: C) 2005 자유 소프트웨어 재단, 주식

나는 문제가이 GCC 컴파일러 문제로 인해 수 있습니다 것을 배웠다

이것은 사용자가 경험 한 것일 수도 있습니다. 이 값은 함수의 반환 값으로 사용되어야합니다.

필자의 경우 프로그램은 올바르게 실행되는 프로그램이었습니다. 이 문제는 빌드가 '제로 최적화'로 설정되어 있고 바이너리의 부적절한 디버그 정보와 관련된 경우에도 효과가있는 최적화와 관련이 있습니다. 그러나 프로그램 자체가 잘 돌아가고있었습니다.

관련 문제