2009-07-23 4 views
2

어떤 이유로 if (false)가 실제로 작동하는 것 같습니다. ReferenceEquals 호출은 추가 테스트로 거기에 있습니다. 전에 false로 나온 사용자 == null이되기 전에 if 문이 여전히 앞에있었습니다.C#이 실존 적으로 진행되고 있습니까?

[업데이트] 이것은 SharePoint/ASP.Net 환경이므로 예 멀티 스레드입니다. 그러나 내가 작성한 코드 중 어느 것도 스레딩을 수행하지 않습니다. 이것은 if 문이 false = true라고 생각하는 것으로 보이는 부울 유형의 결과로 충분합니다. 나는 깨끗한 해결책을 시도하고, dev 환경을 재시작하고, 시스템을 재시작했다. 디버거의 코드가 실행되는 코드와 다르다는 증거를 찾을 수 없습니다.

[주] 코드를 여러 가지 해킹하고 조금씩 해킹하여 조금 잘못되었다고 생각하면 코드가 좋지 않습니다. 나에 대해 나쁜 코드를 붙들어서는 안된다. 예를 userFound 정말 userNotFound

을 지정해야합니다 들어

alt text http://img228.imageshack.us/img228/6869/snippit.png

+2

이 질문입니까? 읽을 수없는 VS 스크린 샷 대신 코드 게시하기 – thecoop

+0

나는 그 것을 분명히 볼 수 있습니다. –

+4

이 페이지 외부의 이미지를 열면 더 커집니다. – adrianbanks

답변

0

는 스레딩의 몇 가지 유형을하고 있습니다. 또한 정확하게 기억하지는 않지만 코드 편집기에서보고있는 코드와 비교하여 오래된 코드를 디버깅하는 코드를 사용할 수 있습니까?

사용자를 찾지 못하도록 시도하고 코드에 뭔가있는 경우 동작이 반대인지 확인하십시오. 예를 들어 Visual Studio와 같은 것이 있습니다. C#은 실존 적으로 진행됩니다

18

깨끗한 빌드를 시도해보십시오. IDE의 코드가 디버깅중인 코드와 정확히 일치하지 않을 수도 있습니다.

+0

SharePoint와 관련된 일은 이전에도 있었지만 이번에는 그 일을하고 있다는 증거는 찾을 수 없습니다. –

+0

ASP.NET 캐시 위치 중 하나에 이전 버전의 코드가있을 수 있습니다. –

+0

더티 빌드를 감지하는 한 가지 방법은 Ctrl + Alt + D를 눌러 Disassembly보기 (및 레지스터를 표시하는 Ctrl + D, R)로 전환하여 실제로 일어나는 것을 볼 수 있도록하는 것입니다. 그런 다음 다시 한 번 클린 빌드를 수행 할 수 있습니다. –

0

SharePoint 사이트입니다. 그것은 ASP.NET을 실행 중입니다. 그것은 멀티 스레드입니다. 너의 것이 유일한 요청이라고 확신합니까?

릴리스 빌드 또는 디버그 빌드입니까? 내가 정교 할 필요가 있니?

+0

SS는 프로젝트 구성에서 디버그를 보여줍니다. 셰어 포인트와 asp.net에 대해 많이 알지 못하지만 디버깅이란 무엇입니까? – Annerajb

+0

아니요, 디버그 모드에서 빌드 한 코드입니다. 참조하는 구성은 우리가 볼 수있는 코드가 디버그 모드로 작성되었다고 보장 할 수 없습니다. –

+0

ahh gotcha 나는 지금 무슨 뜻인지 이해합니다. 그는 디버그로 빌드 한 다음 실수로 릴리스로 전환 할 수있었습니다. – Annerajb

5

나는 이상한 결과를 얻는 이유를 알지 못합니다. 그러나 코드는 이 잘못된입니다. "userFound"가 인 경우 "userObject"가 null이면? 사용자 객체가 인 경우 은이고, 사용자 객체가 이 아닌 경우입니다.

나머지 코드는 "userFound == true"는 실제로 "사용자를 찾을 수 없음"을 의미한다고 가정합니다.

"userIsMissing"변수의 이름을 변경하면이 코드가 훨씬 덜 혼란 스럽습니다.

+0

당신이 지적한 것은 다른 것들을 시도하기 위해 이것을 해킹하는 인공물입니다. 그것은 원래 읽었습니다! userFound –

+1

메모리에 오래된 바이너리가 있다는 것을 강하게 암시합니다! –

+2

John이 정확하게 맞습니다. 그것은 거의 확실하게 여기서 일어나고있는 일입니다. 디버깅중인 이진 이미지와 일치하지 않는 소스 코드를 사용하고 있습니다. VS가 설치 될 때 경고 할 수 있도록 VS를 설정하는 방법이 있어야합니다. –

0

bin/debug 폴더에서 dll과 pdb를 삭제하고 다시 컴파일 한 후 다시 시도하십시오.

+0

나는 이것을 시도했다. 또한 GAC에서 어셈블리를 삭제하고 iisreset을 실행하여 이전 버전의 복사본이 없는지 확인했습니다 –

0

호기심에서 벗어난 부울 값을 인쇄 해 보았습니까? 콘솔에 인쇄하거나 페이지에 글을 쓰거나.

때로는 마법 부두가 발생하지만 값을 인쇄하면 언제나 도움이됩니다.

디버거가 편리하지만 항상 신뢰할 수있는 것은 아닙니다.

+0

포인트를 얻었지만 디버거에서 말하는 것처럼 부울은 false입니다. userObject가 null이 아니기 때문에 ReferenceEquals 호출은 false가됩니다. –

관련 문제