2009-06-01 5 views
1

Visual Studio 2005에서 큰 프로젝트의 일부를 디버깅하고 코드를 한 줄씩 단계별로 실행하고 있습니다.할당이 실패했습니다

int speed = this->values.speed; 
int ref = this->values.ref_speed; 

첫번째 라인지나 스텝 후, values.speed 61의 값을 가지고 있지만, 어떤 이유로 속도는 두번째 라인 이후의 값 (58)을 할당지고, values.ref_speed 58의 값을 갖는다, ref는 값 30을 할당받습니다.

일시 중지하면 원래 값이 각각 61과 58이지만 실제로 저장되는 값이 다릅니다.

이 동작의 원인은 무엇입니까?

+2

멀티 스레드 응용 프로그램입니까? – Robert

+0

값을위한 코드를 게시하는 것은 어떻습니까? – JeffH

+0

예. 그러나 그 특정 위치는 한 번만 기록됩니다. –

답변

6

값 구조의 정의가 헤더 파일에서 변경되고 모든 오브젝트 파일이 다시 컴파일되지 않은 경우에 발생할 수 있습니다. 그런 다음이 파일의 코드가 사용중인 구조의 "지도"가 나머지 코드와 일치하지 않을 수 있습니다. 왜 변수 중 하나가 다른 변수 값을 갖는지를 설명 할 수 있습니다.

또는 Visual Studio .pdb 파일이 어떤 이유로 업데이트되지 않고 Visual Studio에서 변수의 이전 위치를 찾고 있습니다.

+0

디버깅 정보가 프로젝트와 올바르게 동기화되는지 확인합니다. 이전 버전의 디버깅 정보가로드되어 값이 정렬되지 않은 문제가 발생했습니다. –

+0

구조가 두 개의 다른 장소에서 서로 다른 두 가지로 정의 된 경우. 어떻게 컴파일을했는지 ​​모르지만 구조는 두 곳에서 두 번 정의되었습니다. 변수의 순서가 바뀌 었습니다. 감사합니다. –

0

디버그 또는 릴리스 모드에서이 작업을 수행하고 있습니까? 릴리스 모드에서 또는 최적화가 설정된 상태에서 컴파일러가 성능 향상을 위해 일을 재정렬하고 이상한 결과를 초래할 수 있습니다. 이것은 실제 실행에 문제가 있음을 의미하지는 않지만 단계별로 혼동을 줄 수 있습니다.

+0

이것은 디버그 모드에서 발생합니다. –

1

크레이지. 혹시 this-> values와 같은 타입의 로컬 변수를 가질 수도 있는데,이 값은 이름도 값이다 (왜 this->를 통해 멤버를 참조하는지 설명 할 것이다)?

+0

로컬 변수가 없습니다. 매우 긴 show() 루틴에서 지역 변수가 아니라는 것을 분명히하기 위해이 방법을 사용했습니다. –

관련 문제