답변

3

일반적으로 스레드 패널에서 마우스 오른쪽 버튼을 클릭하여 다른 스레드를 고정시킵니다. 이것이 제정신인지 아닌지 나는 모른다.

6

디버거에서 프로그램을 실행하면 프로그램의 결과가 변경되어서는 안되기 때문에 기본값입니다.

프로그램이 "실행 중"이면 스레드간에 끊임없이 전환되므로 디버거가 동일하게 수행하지 않으면 프로그램이 다르게 작동합니다.

나는 그것을 막기 위해 알고있는 유일한 방법은 스레드 창을 열고 현재 스레드가 아닌 다른 모든 스레드를 마우스 오른쪽 단추로 클릭하고 freeze을 선택하는 것입니다.

+0

이것은 의미가 있지만 ... 매우 짜증나는 사실을 바꾸지는 않습니다. :) MS가 현재 스레드 내에서 중단 점에 도달 할 때 config 옵션을 추가하면 디버깅에 도움이 될 것입니다 ... 그런 식으로, 그 당시 실행중인 논리는 성가심과 관련성없이 디버깅 될 수 있습니다. 고정 된 스레드로 프로그램을 디버깅 할 때 지연됩니다. – Jon

+0

동의하지는 않지만 명백한 논쟁은 디버깅 할 때 디버깅 버전 응용 프로그램을 최적화하여 컴파일하지 않았기 때문에 실제 프로덕션 응용 프로그램과 함께 작업하지 않는 것입니다. 논리 문제를 찾고 있다면, 디버거를보다 잘 제어하는 ​​것이 pedantically 올바른 것보다 훨씬 더 유용합니다. – stu

19

"특정 스레드를 디버깅 할 때 Visual Studio가 다른 스레드로 무작위로 점프합니다."라고 말하면 특정 스레드의 코드를 단계별로 실행하면됩니다. 다른 스레드에서 중단 점을 맞았습니까?

http://msdn.microsoft.com/en-us/library/w15yf86f.aspx에서 :

그렇다면, 당신은 당신이 디버깅 관심있는 것보다는 다른 스레드 '동결'에 스레드 창을 사용할 수있는 스레드 창에서

, 당신은 설정할 수 있습니다 활성 스레드. 또한 은 각 개별 스레드 의 실행을 고정하거나 해동 할 수 있습니다. 고정 스레드의 실행을 방지합니다. 해동을 사용하여 계속 진행할 수 있습니다. 두 개의 수직 파란색 막대는 고정 된 스레드를 나타냅니다.

지원은 Visual Studio의 버전 (예 : Express 버전이 스레드 창을 지원하지 않는다고 생각하는 경우)에 따라 다를 수 있습니다.

4

여기서 모든 대답은 스레드를 고정시키는 것에 대한 이야기이지만, 많은 경우에는 문제가 발생하고 어느 것이 고정되는지는 알 수 없습니다. 나는 쉬운 속임수를 발견했다. 브레이크 포인트는 스레드 I 타격하고 J라고한다

, K은 등은, 일부 시간에 동일한 히트 일시적으로 브레이크를 해제 및 스레드 I에게 디버깅을 시작하려고 . 디버거가 다른 스레드로 넘어 가지 않는다는 것을 알았습니다. 왜냐하면이 스레드는 중단 점이 없기 때문입니다. 디버깅이 끝나면 중단 점을 활성화하십시오.

관련 문제