".NET Framework 소스 스테핑 활성화"를 어떻게 활성화합니까?


118

2013 년 2 월 22 일 업데이트 : Microsoft Connect 항목에는 이제 문제가 해결되어야한다는 Alok Shriram (프로그램 관리자, 기본 클래스 라이브러리, .NET Framework)의 메모가 있습니다. Connect 항목은 Resolved (Fixed) 로 표시됩니다 .

이제이 문제가 해결되어야합니다. 참조 소스에 대한 업데이트를 게시했습니다. 여전히 문제가 해결되지 않은 경우 알려주십시오.

1 년 반.

보너스 링크

원래 질문

Visual Studio 2010에서 .NET Framework 소스 스테핑을 활성화하려면 어떻게합니까?


참고 :이 질문은 더 큰 전체의 한 부분입니다.


Visual Studio 2010에는 다음과 같은 새로운 기능이 있습니다.

  • 도구, 옵션, 디버깅, 일반, .NET Framework 소스 스테핑 사용

옵션 메뉴 스크린 샷

MSDN 페이지의 지침에 따라 방법 : .NET Framework 소스 디버그 :

.NET Framework 소스 디버깅을 사용하려면

  1. 도구 메뉴를 클릭 옵션 .

  2. 에서 옵션 대화 상자에서 클릭 디버깅 범주를.

  3. 에서 일반 상자에서 다음 확인란을 선택합니다 :

    • .NET Framework 소스 스테핑 사용
    • 소스 서버 지원 활성화

나는 이것을한다:

선택한 관련 옵션이 강조 표시된 옵션 메뉴 스크린 샷

참고 : MSDN 페이지에서 알 수 있듯이 .NET Framework 소스 스테핑 사용을 선택하면 ** 내 코드 만 사용 (관리 전용)이 자동으로 선택 취소됩니다. 또한 소스 서버 지원의 진단 메시지를 활성화했습니다.

이러한 옵션을 활성화하면 자동으로 기호 캐시 다운로드 위치가 설정됩니다.

옵션 메뉴 스크린 샷, 캐시 디렉토리 표시 (강조 표시됨)

참고 : Microsoft Symbol Server 항목이 이미 존재하며 제거 할 수 없습니다.


MSDN 페이지에 기호를로드하라는 메시지가 표시됩니다.

모듈 창을 사용하여 프레임 워크 기호를로드하려면

  1. 에서 모듈 창에서 기호는로드되지 않은 모듈을 마우스 오른쪽 버튼으로 클릭합니다. 기호 상태 열 을보고 기호가로드되었는지 여부를 알 수 있습니다 .

  2. 가리킨 에서 기호로드 를 클릭 Microsoft 기호 서버를 이전에 저장된 기호가 디렉토리에서 부하에 마이크로 소프트 공용 기호 서버 또는 기호 경로에서 다운로드 기호에.

나는 이것을 시도한다 :

여기에 이미지 설명 입력

그런 다음 모든 기호가로드됩니다.

위에서 설명한 모듈 창의 스크린 샷

.NET 프레임 워크 코드를 호출하려고하는 중단 점에 앉아 있습니다.

아래에 적힌 코드 스크린 샷

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

푸시 F11하면 디버거가 다음 줄로 건너 뜁니다.

아래에 적힌 코드 스크린 샷

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

    //Record the running scale factor used
    this.scaleFactor = new SizeF(
            this.scaleFactor.Width * factor.Width,
            this.scaleFactor.Height * factor.Height);

Visual Studio 2010에서 .NET Framework 소스 스테핑을 활성화하려면 어떻게합니까?


내 코드의 중단 점에 앉아 있습니다. 호출 스택에서 더 위쪽에있는 함수를 두 번 클릭합니다. 이렇게 하면 .NET 코드 로 이동할 수 있기를 바랍니다 .

여기에 이미지 설명 입력

작동하지 않는다는 점을 제외하면 Visual Studio에서 사용할 수있는 소스가 없다고 알려줍니다.

No Source Available이라는 오류 메시지 스크린 샷

Visual Studio 2010에서 .NET Framework 소스 스테핑을 활성화하려면 어떻게합니까?


.NET 코드 ( Debug- > Windows- > Disassembly ) 로 들어가기 전에 디스 어셈블리보기로 전환하면 .NET 코드 를 볼 수 있습니다 call.

코드 스크린 샷

그리고 내가 할 때 나는 다음의 디스 어셈블리를 디버깅하게된다 System.Windows.Forms.ScaleControl.

분해 창의 스크린 샷

.NET Framework 소스에 들어갈 수있는 것과 같거나 유용하지 않습니다.

Visual Studio 2010에서 .NET Framework 소스 스테핑을 활성화하려면 어떻게합니까?


내 컴퓨터에 구성된 기호 캐시 경로에 기호 캐시 파일이 포함되어 있습니다.

폴더 목록 스크린 샷

따라서 pdb심볼 파일을 다운로드 하고 있지만 사용을 거부합니다.

Visual Studio 2010에서 .NET Framework 소스 스테핑을 활성화하려면 어떻게합니까?


Leppie는 내가 Debug로그를 확인할 것을 제안했습니다 (디버그 로그 창이 열린 상태로, 그렇지 않으면 아무것도 기록하지 않음).

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

로그의 앞부분에서 다음에 대한 기호를로드하는 것을 볼 수 있습니다 System.Windows.Forms.dll.

Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.

여기에 이미지 설명 입력

그것을 그래서 되어 내 문자를 발견하지만, 그들을 찾을 수 없다고 주장.

Visual Studio 2010에서 .NET Framework 소스 스테핑을 활성화하려면 어떻게합니까?


Microsoft 이탈리아의 한 사람이 원본 버전과 정확히 일치하도록 소스 파일 필요를 해제 할 것을 제안 합니다 .

옵션 창의 스크린 샷

그것은 그것을 고치지 않았습니다.

Visual Studio 2010에서 .NET Framework 소스 스테핑을 활성화하려면 어떻게합니까?


.NET Framework 4.0 용 Microsoft의 소스 서버에 버그가 있다고 제안되었습니다 . 그 제안에 따라 프로젝트를 .NET Framework 3.5 를 대상으로 전환했습니다 .

여기에 이미지 설명 입력

그것은 그것을 고치지 않았습니다.

Visual Studio 2010에서 .NET Framework 소스 스테핑을 활성화하려면 어떻게합니까?


어떤 사람은 같은 문제를 겪고있는 다른 사람 이 64 비트 버전의 디버거를 사용하고 있는지 어리석게 생각했습니다 . 이제 64 비트 버전의 Visual Studio와 같은 것은 없지만 Microsoft가 64 비트 프로세서를 지원하지 않는 경우 프로젝트를 AnyCPU 에서 x86 (x64로 JIT 됨)으로 전환 해 보았습니다.

여기에 이미지 설명 입력

문제가 해결되지 않았습니다.

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Visual Studio 2010에서 .NET Framework 소스 스테핑을 활성화하려면 어떻게합니까?


또한보십시오


소스 코드 '캐시'를 확인 했습니까?
leppie 2011

@leppie "소스 코드 '캐시'"는 무엇을 의미합니까? 소스 코드를 캐시하는 폴더를 의미하는 경우 채워집니다 ( 업데이트 4 참조 )
Ian Boyd

예. 해당 소스 파일을 열고 중단 점을 설정할 수 있습니까?
leppie 2011

1
문제에 대한 훌륭한 쓰기!
andersonbd1 2013 년

1
VS2012에서도 작동하지 않습니다. 모든 것을 구성하고 작동을 멈춘 후 하루 동안 작동했습니다. 이틀 후에는 수십 개의 커피, 수백 개의 웹 페이지가 작동하지 않습니다. 동시에 symbolsource.org에 의해 게시 된 소스는 매력처럼 작동합니다.
Wiktor Zychla

답변:


35

소스 코드를 단계별로 실행하기위한 PDB는 RTM 및 서비스 팩에 대해서만 게시됩니다. 따라서 보안 업데이트가 나오고 디버깅하려는 dll을 수정하면 소스 스테핑이 작동하지 않습니다 (즉, "소스 찾기를 찾아보기 위해 탐색"이 회색으로 표시된 "사용 가능한 소스 없음"이 표시됩니다. ").

그러나 적절한 설정을 모두 지정한 후에는 다음 해결 방법을 사용할 수 있습니다. 해결 방법은 본질적으로 dll을 변경하게 만든 보안 업데이트를 찾은 다음 제거하는 것입니다. 이것은 컴퓨터에서 이러한 보안 업데이트를 제거하는 명백한 단점이 있습니다.

해결 방법

  1. 디버그 할 dll 식별 (예 : System.Windows.Forms.dll)
  2. 디버깅하는 동안 Visual Studio에서 모듈 창을 열고 버전 열을 찾습니다 . 버전이 RTM 또는 서비스 팩 버전이 아닌 경우 워크 플로를 수행해야합니다. 일반적으로 RTM dll은 "built by : RTMRel"이라고 말합니다. 보안 업데이트의 일부인 dll은 "built by : RTMGDR"로 표시됩니다. 버전 번호를 적어 둡니다 (예 : RTMGDR에서 빌드 한 4.0.30319.269).
  3. 이제이 버전을 만든 업데이트를 찾고 싶습니다. support.microsoft.com/kb/에서 dll 및 버전 번호를 검색하여이를 수행하십시오. 예를 들어, 다음 Google 검색을 수행했습니다. site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  4. 업데이트에 대한 정보가 검색되어야합니다. 주소 표시 줄의 KB 번호를 확인합니다. 내 예에서 주소는 http://support.microsoft.com/kb/2604121이므로 KB2604121이 우리가 관심을 갖는 것입니다.
  5. 제어판-> 프로그램 및 기능으로 이동하여 "설치된 업데이트보기"를 클릭합니다.
  6. KB 번호가 나열된 업데이트를 찾습니다 (오른쪽 상단 상자에서 검색을 사용할 수 있음).
  7. 해당 업데이트를 제거하십시오.
  8. dll이 RTMRel 버전 또는 SP 버전으로 돌아갈 때까지 동일한 dll에 대해이 프로세스를 반복합니다. 예를 들어 System.Windows.Forms.dll의 경우 RTMRel 버전으로 돌아 가기 전에 KB2686827, KB2604121, KB2518870을 제거해야했습니다.

디버깅하려는 .NET 프레임 워크 내의 각 dll에 대해이 작업을 수행해야합니다.

완료되면 .net 소스 내에 중단 점을 설정하거나 (예를 들어 중단 점 탭으로 이동하여 New-> Break at Function을 말하고 System.Windows.Forms.Form.Form을 입력) .net 중 하나에 들어가십시오. 그 dll의 메소드.


1
맞습니다, 트릭은 제거 할 올바른 항목을 찾는 것입니다 (일반적으로 많은 항목 이 설치되어 있고 제거하는 데 시간이 걸립니다).
Matt Smith

보안 업데이트를 제거 할 수 없습니다. 회사 정책에 위배됩니다. Microsoft Symbols 서버와 일치하는 mscorlib.dll (및 기타)의 복사본을 얻을 수있는 방법이 있습니까? 내 mscorlib.dll은 버전 4.0.30319.269 (RTMGDR.030319-2600)입니다. 아마도이 새 DLL로 GAC를 일시적으로 업데이트하고 소스 스테핑을 시도 할 수 있습니다.
kevinarpe

회사 정책에도 위배됩니다. 작업을 마친 후 다시 설치합니다. (올바르게 작동하기 위해) 롤백해야하는 다른 dll과는 독립적으로 이전 버전의 mscorlib.dll을 사용할 수 있다고 생각하지 않습니다. 또한 이전 dll로 GAC를 임시로 업데이트하는 것은 본질적으로 보안 업데이트를 일시적으로 제거하는 것과 같습니다.
Matt Smith

Microsoft가 보안 업데이트 소스를 공개하지 않는 이유는 누군가가 코드 변경 사항을 비교하고 보안 취약점이 무엇인지 이해하고 자신의 악용을 만들 수 있기 때문입니다. Microsoft가 인식하지 못하는 것은 "소스 코드" 가 이미 ILSpy 또는 Relfector를 사용하여 사용 가능하다는 것입니다. 따라서 Microsoft는 소스 코드를 공개하지 않음으로써 실제로 누구를 더 안전하게 만들지 않습니다. 단지 개발자의 삶이 더 어려워 질뿐입니다.
Ian Boyd

2
@IanBoyd 나는 그것이 MS의 동기라고 의심합니다. 나는 그들의 워크 플로가 단순히 디버깅을 위해 소스 PDB 업데이트를 지원하지 않는다고 가정합니다. 그들은 주로 보안 구멍을 닫는 데 관심이 있습니다.
xanadont dec

6

안타깝게도 Leppie가 지적했듯이 Microsoft에 문제가 있습니다 (그리고 동일한 결과를 얻었습니다.

다음을 참조 했으므로 시도는 실패 할 것입니다.

  • Microsoft Symbol 서버

대신에:

  • referencesource.microsoft.com/symbols

.NET Framework 소스 코드를 디버그하도록 Visual Studio 구성 의 FAQ / 문제 해결 섹션을 참조하십시오.


4

나는 답을 찾았다 고 생각한다.

나는 Fiddler에서 무슨 일이 일어나고 있는지 추적했습니다. 현재 기호 만 사용할 수 있으며 소스는없는 것 같습니다.

VS가 'referencesource'서버에서 기호를로드하려고하면 실패합니다 (404). 이것이 실패하면 해당 서버의 소스 파일에 매핑 할 수 없다고 생각합니다.

http://referencesource.microsoft.com/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pdb

위의 실패 후 실제 PDB를 찾는 'msdl'이라는 서버를 시도합니다 (하지만이 서버에는 소스 코드 정보가없는 것으로 보입니다).

http://msdl.microsoft.com/download/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pd_

대체로 서버에 대한 (일시적인) Microsoft 문제로 보입니다.

나는 얼마 전에 소스 코드를 가지고 있다고 확신합니다. 그러나 지금은 작동하지 않습니다.

편집하다:

나는 다양한 .NET 버전으로 시도해 보았는데 모두 같은 결과였습니다. :(


1
내 정확한 단계는 글쎄 그것은 매우 흥미로운 일이 될 것이다 있어야 작동 (하지만하지 않는) (미래에) 작동 및 일 (하지만 오늘). 11 시간을 문제에 보냈기 때문에 매우 실망 스러울 것입니다.
Ian Boyd

2
msdl.microsoft.com은 Microsoft Symbol Server 인 것으로 보입니다
yoel halb

2
그리고 다시 생겼습니다
Simon_Weaver

7 년이 지난 후에도 "일시적인 서버 문제"가 아닌 것 같지만 링크는 여전히 작동하지 않습니다.
jrh


1

제 경우에는 이전 .NET 2.0 WinForms 응용 프로그램을 디버깅하고 있었는데 "소스를 사용할 수 없음" 메시지가 표시되었습니다. 모든 권장 설정을 시도했습니다.

궁극적으로 저는 일시적으로 .NET 4.5를 대상으로 앱을 다시 빌드 했으며 소스 스테핑이 작동하도록 할 수있었습니다. 아마도 내 앱은 소스 스테핑에 너무 오래되었을 것입니다. 일종의 목적에 맞지 않는다는 것은 알지만 빠르고 더러운 테스트에서는 작동합니다. 내가 가진 버그는 여전히 .NET 4.5에 있습니다. :)

대상 프레임 워크



0

다음은 공식 지침입니다 https://referencesource.microsoft.com/setup.html

.NET Framework 디버깅을 위해 Visual Studio 2013 구성

Visual Studio 2013을 구성하려면 도구-> 옵션-> 디버깅-> 일반 메뉴에서 다음을 수행하십시오.

  • 내 코드 만 비활성화
  • 속성 및 연산자를 건너 뛰기 비활성화
  • 원본 파일이 원본 버전과 정확히 일치하도록 요구 비활성화
  • .NET 프레임 워크 소스 스테핑 사용
  • 소스 서버 지원 활성화

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.