Làm cách nào để kích hoạt “Bật bước nguồn .NET Framework”?


118

Cập nhật ngày 22 tháng 2 năm 2013 : Mục Microsoft Connect có ghi chú từ Alok Shriram (Trình quản lý chương trình, Thư viện lớp cơ sở, .NET Framework) rằng sự cố bây giờ sẽ được giải quyết. Mục Kết nối được đánh dấu là Đã giải quyết (Đã sửa) :

Sự cố này bây giờ sẽ được khắc phục. Chúng tôi đã xuất bản một bản cập nhật cho các nguồn tham khảo. Vui lòng cho chúng tôi biết trong trường hợp sự cố của bạn vẫn chưa được khắc phục.

Một năm rưỡi.

Liên kết thưởng

Câu hỏi gốc

Làm cách nào để kích hoạt bước nguồn khung công tác .NET trong Visual Studio 2010?


Lưu ý : Câu hỏi này là một phần của tổng thể lớn hơn:


Visual Studio 2010 đi kèm với một tính năng mới:

  • Công cụ, Tùy chọn, Gỡ lỗi, Chung, Bật bước nguồn .NET Framework

Ảnh chụp màn hình menu tùy chọn

Làm theo hướng dẫn trên trang MSDN Cách thực hiện: Gỡ lỗi .NET Framework Nguồn :

Để bật gỡ lỗi nguồn .NET Framework

  1. Trên menu Công cụ , bấm vào Tùy chọn .

  2. Trong hộp thoại Tùy chọn , bấm vào danh mục Gỡ lỗi .

  3. Trong hộp Chung , hãy chọn các hộp kiểm sau:

    • Bật bước nguồn .NET Framework
    • Bật hỗ trợ máy chủ nguồn

Tôi làm việc này:

Ảnh chụp màn hình menu tùy chọn, đánh dấu các tùy chọn liên quan đã chọn

Lưu ý : Bạn sẽ lưu ý, như trang MSDN ghi chú và như tôi nhận thấy, việc kiểm tra Bật bước nguồn .NET Framework sẽ tự động bỏ chọn ** Bật Chỉ mã của tôi (Chỉ được quản lý). Tôi cũng đã bật thông báo chẩn đoán của hỗ trợ máy chủ nguồn.

Bật các tùy chọn đó sẽ tự động đặt vị trí tải xuống bộ nhớ cache biểu tượng cho tôi:

Ảnh chụp màn hình menu tùy chọn, hiển thị thư mục bộ nhớ cache (được đánh dấu)

Lưu ý : Mục Microsoft Symbol Server đã có sẵn (và không thể xóa được).


Trang MSDN cho biết tải các ký hiệu:

Để tải các ký hiệu Framework bằng cửa sổ Mô-đun

  1. Trong cửa sổ Mô-đun , bấm chuột phải vào mô-đun mà các ký hiệu không được tải. Bạn có thể biết liệu các biểu tượng đã được tải hay chưa bằng cách nhìn vào cột Trạng thái Biểu tượng .

  2. Trỏ để Tải ký hiệu Từ và bấm Máy chủ ký hiệu Microsoft để tải xuống ký hiệu từ máy chủ ký hiệu công cộng của Microsoft hoặc Đường dẫn ký hiệu để tải từ thư mục nơi bạn đã lưu ký hiệu trước đó.

Tôi thử cái này:

nhập mô tả hình ảnh ở đây

và sau đó tất cả các ký hiệu được tải:

Ảnh chụp màn hình cửa sổ mô-đun, như mô tả ở trên

Tôi đang ngồi trên một điểm ngắt, điểm này sắp gọi vào mã khung công tác .NET:

Ảnh chụp màn hình mã, được phiên âm bên dưới

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

Việc đẩy F11khiến trình gỡ lỗi chỉ cần bỏ qua dòng tiếp theo:

Ảnh chụp màn hình mã, được phiên âm bên dưới

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);

Làm cách nào để kích hoạt bước nguồn .NET Framework trong Visual Studio 2010?


Tôi đang ngồi ở một điểm ngắt trong mã của mình. Tôi thử nhấp đúp vào một chức năng ở phía trên trong ngăn xếp cuộc gọi. Điều này sẽ, tôi hy vọng, cho phép tôi nhảy vào mã NET:

nhập mô tả hình ảnh ở đây

Ngoại trừ việc nó không hoạt động: Visual Studio cho tôi biết rằng không có nguồn nào có sẵn:

Ảnh chụp màn hình thông báo lỗi cho biết Không có Nguồn

Làm cách nào để kích hoạt bước nguồn .NET Framework trong Visual Studio 2010?


Nếu tôi chuyển sang chế độ tháo dỡ trước khi cố gắng để bước vào NET mã ( gỡ lỗi -> của Windows -> Tháo lắp ), tôi có thể nhìn thấy một callvào mã NET:

Ảnh chụp màn hình của mã

Và khi tôi làm như vậy, tôi kết thúc việc gỡ lỗi gỡ bỏ System.Windows.Forms.ScaleControl:

Ảnh chụp màn hình cửa sổ tháo gỡ

Điều nào không giống hoặc hữu ích bằng, có thể bước vào nguồn .NET Framework.

Làm cách nào để kích hoạt bước nguồn .NET Framework trong Visual Studio 2010?


Đường dẫn bộ đệm ký hiệu đã định cấu hình trên máy tính của tôi có chứa các tệp bộ đệm ký hiệu:

Ảnh chụp màn hình danh sách thư mục

Vì vậy, nó đang tải xuống pdbcác tệp biểu tượng, nhưng từ chối sử dụng chúng.

Làm cách nào để kích hoạt bước nguồn .NET Framework trong Visual Studio 2010?


Leppie đề nghị tôi kiểm tra Debugnhật ký (với cửa sổ nhật ký gỡ lỗi đang mở; nếu không thì nó không ghi nhật ký gì cả):

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

Trước đó trong nhật ký, tôi thấy nó tải các ký hiệu cho System.Windows.Forms.dll:

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

nhập mô tả hình ảnh ở đây

Vì vậy, nó đang tìm kiếm các biểu tượng của tôi, nhưng tuyên bố rằng nó không thể tìm thấy chúng.

Làm cách nào để kích hoạt bước nguồn .NET Framework trong Visual Studio 2010?


Một người đến từ Microsoft Ý đề nghị tắt Yêu cầu tệp nguồn khớp chính xác với phiên bản gốc :

Ảnh chụp màn hình cửa sổ tùy chọn

Điều đó đã không sửa chữa nó.

Làm cách nào để kích hoạt bước nguồn .NET Framework trong Visual Studio 2010?


Có ý kiến ​​cho rằng có lỗi với máy chủ nguồn của Microsoft cho .NET Framework 4.0 . Theo gợi ý đó, tôi đã chuyển dự án sang mục tiêu .NET Framework 3.5 :

nhập mô tả hình ảnh ở đây

Điều đó đã không sửa chữa nó.

Làm cách nào để kích hoạt bước nguồn .NET Framework trong Visual Studio 2010?


Một người nào đó ở đâu đó đã tự hỏi liệu một người khác gặp phải vấn đề tương tự có đang sử dụng phiên bản 64-bit của trình gỡ lỗi hay không . Bây giờ, không có cái gọi là phiên bản 64 bit của Visual Studio, nhưng tôi đã thử chuyển dự án của mình từ AnyCPU sang x86 (nó đang được JITed thành x64), trong trường hợp Microsoft không hỗ trợ bộ xử lý 64 bit:

nhập mô tả hình ảnh ở đây

Điều đó không khắc phục được nó:

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

Làm cách nào để kích hoạt bước nguồn .NET Framework trong Visual Studio 2010?


Xem thêm


Bạn đã kiểm tra mã nguồn 'cache' chưa?
leppie

@leppie Bạn hiểu "mã nguồn" bộ nhớ cache "là gì? Nếu bạn có nghĩa là thư mục mà lưu trữ mã nguồn trong, nó đang được dân cư (Xem Cập nhật 4 )
Ian Boyd

Đúng. Có thể mở tệp nguồn đó và đặt điểm ngắt không?
leppie

1
viết xuất sắc về vấn đề!
andersonbd1

1
Nó cũng không hoạt động trong VS2012. Nó hoạt động trong một ngày, sau khi tôi định cấu hình mọi thứ và chỉ ngừng hoạt động. Hai ngày, hàng chục chiếc quan tài, hàng trăm trang web sau đó nó không hoạt động. Đồng thời, các nguồn do Symbolource.org xuất bản chỉ hoạt động như một sự quyến rũ.
Wiktor Zychla

Câu trả lời:


35

Các PDB để chuyển qua mã nguồn chỉ được đăng cho RTM và Gói dịch vụ. Do đó, khi bản cập nhật bảo mật xuất hiện và nó sửa đổi dll bạn đang cố gắng gỡ lỗi, nó sẽ khiến bước nguồn không hoạt động (nghĩa là bạn sẽ nhận được thông báo "Không có nguồn" với màu xám "Duyệt để tìm nguồn ").

Tuy nhiên, khi bạn đã thực hiện tất cả các cài đặt thích hợp, bạn có thể sử dụng cách giải quyết sau. Cách giải quyết về cơ bản là tìm các bản cập nhật bảo mật khiến dll thay đổi, sau đó xóa chúng. Điều này có nhược điểm rõ ràng là xóa các bản cập nhật bảo mật đó trên máy của bạn.

Cách giải quyết

  1. Xác định dll nào bạn muốn gỡ lỗi (ví dụ: System.Windows.Forms.dll)
  2. Trong khi gỡ lỗi, hãy mở cửa sổ Mô-đun trong Visual studio, tìm cột Phiên bản . Nếu phiên bản không phải là phiên bản RTM hoặc Gói dịch vụ, thì bạn sẽ cần thực hiện quy trình làm việc. Thông thường, dll RTM sẽ nói "được xây dựng bởi: RTMRel". Trong khi dll là một phần của bản cập nhật bảo mật sẽ cho biết "được xây dựng bởi: RTMGDR". Lưu ý số phiên bản (ví dụ: 4.0.30319.269 được tạo bởi: RTMGDR)
  3. Bây giờ, chúng tôi muốn tìm bản cập nhật đã tạo ra phiên bản này. Thực hiện việc này bằng cách tìm kiếm dll và số phiên bản tại support.microsoft.com/kb/ Ví dụ: tôi đã thực hiện tìm kiếm google sau: site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  4. Tìm kiếm sẽ hiển thị thông tin về một bản cập nhật. Lưu ý số KB trên thanh địa chỉ. Trong ví dụ của tôi, địa chỉ là http://support.microsoft.com/kb/2604121, vì vậy KB2604121, là những gì chúng tôi quan tâm.
  5. Đi tới Bảng điều khiển-> Chương trình và Tính năng và nhấp vào "Xem các bản cập nhật đã cài đặt"
  6. Tìm bản cập nhật liệt kê số KB (bạn có thể sử dụng tìm kiếm ở hộp phía trên bên phải).
  7. Gỡ cài đặt bản cập nhật đó.
  8. Lặp lại quá trình này cho cùng một dll này cho đến khi dll trở lại phiên bản RTMRel hoặc phiên bản SP của nó. Ví dụ: đối với System.Windows.Forms.dll, tôi phải xóa KB2686827, KB2604121, KB2518870 trước khi nó quay trở lại phiên bản RTMRel.

Bạn sẽ cần thực hiện việc này cho từng dll trong khuôn khổ .NET mà bạn quan tâm đến việc gỡ lỗi.

Sau khi hoàn tất, hãy đặt một điểm ngắt trong nguồn .net (ví dụ: đi tới tab Điểm ngắt, nói New-> Break at Function và nhập System.Windows.Forms.Form.Form) hoặc bước vào một trong các .net các phương thức trong dll đó.


1
Đúng vậy, mẹo là tìm đúng những cái cần gỡ cài đặt (vì thường thì bạn đã cài đặt rất nhiều trong số chúng và chúng sẽ mất một lúc để gỡ cài đặt).
Matt Smith,

Tôi không thể gỡ cài đặt các bản cập nhật bảo mật. Nó là trái với chính sách của công ty. Có cách nào để lấy các bản sao của mscorlib.dll (và những thứ khác) phù hợp với máy chủ Microsoft Symbols không? Mscorlib.dll của tôi là Verion 4.0.30319.269 (RTMGDR.030319-2600). Có thể, tôi có thể tạm thời cập nhật GAC với DLL mới này và thử bước nguồn.
kevinarpe

Nó có lẽ cũng đi ngược lại chính sách của công ty tôi - tôi chỉ cài đặt lại chúng sau khi hoàn thành. Tôi không nghĩ rằng bạn có thể chỉ sử dụng phiên bản cũ mscorlib.dll độc lập với các dlls khác sẽ được khôi phục lại với nó (để nó hoạt động bình thường). Hơn nữa, cập nhật tạm thời GAC với các dlls cũ về cơ bản sẽ tương đương với việc tạm thời gỡ cài đặt bản cập nhật bảo mật.
Matt Smith

Lý do có thể khiến Microsoft không phát hành nguồn cập nhật bảo mật là ai đó có thể so sánh các thay đổi mã, hiểu lỗ hổng bảo mật là gì và tạo ra các cách khai thác của riêng họ. Điều mà Microsoft không nhận ra là "mã nguồn" đã có sẵn bằng ILSpy hoặc Relfector. Vì vậy, Microsoft, bằng cách không phát hành mã nguồn, không thực sự làm cho bất kỳ ai an toàn hơn - chỉ là các nhà phát triển sống khó khăn hơn.
Ian Boyd

2
@IanBoyd Tôi nghi ngờ đó là động lực của MS. Tôi cho rằng quy trình làm việc của họ chỉ đơn giản là không hỗ trợ cập nhật nguồn PDB để gỡ lỗi. Họ chủ yếu quan tâm đến việc đóng các lỗ hổng bảo mật.
xanadont 13/12/12

6

Trong khi không may có vấn đề với Microsoft, như Leppie đã chỉ ra (và tôi nhận được kết quả tương tự.

cần lưu ý rằng dù sao nỗ lực của bạn cũng sẽ thất bại, vì bạn đã tham khảo:

  • Máy chủ Microsoft Symbol

thay vì:

  • referencesource.microsoft.com/symbols

Xem phần Câu hỏi thường gặp / Khắc phục sự cố của Định cấu hình Visual Studio để gỡ lỗi mã nguồn .NET Framework


4

Tôi đã tìm thấy câu trả lời, tôi nghĩ.

Tôi đã lần theo những gì đang xảy ra trên Fiddler. Có vẻ như chỉ có các biểu tượng hiện có sẵn và không có nguồn.

Khi VS cố gắng tải các ký hiệu từ máy chủ 'nguồn tham chiếu', nó không thành công (404). Vì điều này không thành công, tôi nghĩ rằng nó không thể ánh xạ tới các tệp nguồn trên máy chủ đó.

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

Sau sự cố trên, nó sẽ thử một số máy chủ có tên 'msdl', nơi nó tìm thấy PDB thực (nhưng có vẻ như máy chủ này không có thông tin mã nguồn).

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

Nhìn chung, có vẻ như đây là sự cố (tạm thời) của Microsoft với máy chủ của họ.

Tôi chắc chắn rằng tôi đã có một số mã nguồn một thời gian. Nhưng bây giờ nó không hoạt động.

Biên tập:

Tôi đã thử nó với các phiên bản .NET khác nhau, tất cả đều cho kết quả giống nhau. :(


1
Điều đó sẽ rất thú vị nếu các bước chính xác của tôi nên hoạt động (nhưng không), sẽ hoạt động (trong tương lai) và thực hiện (nhưng không phải hôm nay). Nó cũng sẽ rất khó chịu, vì tôi đã dành 11 giờ cho vấn đề này.
Ian Boyd

2
msdl.microsoft.com dường như là Microsoft Symbol Máy chủ
halb Yoel

2
và nó lại bị hỏng
Simon_Weaver

Dường như không phải là một "sự cố máy chủ tạm thời", 7 năm sau và các liên kết vẫn chết.
jrh


1

Trong trường hợp của tôi, tôi đang gỡ lỗi ứng dụng .NET 2.0 WinForms cũ và tôi nhận được thông báo "Nguồn không khả dụng" . Tôi đã thử tất cả các cài đặt được đề xuất.

Cuối cùng, tôi đã xây dựng lại ứng dụng để tạm thời nhắm mục tiêu .NET 4.5 và có thể bắt nguồn bước hoạt động. Có lẽ ứng dụng của tôi đã quá cũ cho bước nguồn. Tôi biết kiểu đánh bại mục đích, nhưng đối với thử nghiệm nhanh và bẩn thì nó hoạt động. Lỗi mà tôi gặp phải vẫn còn trong .NET 4.5 . :)

Khung mục tiêu



0

Đây là hướng dẫn chính thức https://referencesource.microsoft.com/setup.html

Định cấu hình Visual Studio 2013 để gỡ lỗi .NET framework

Để cấu hình Visual Studio 2013, hãy làm như sau trong menu Công cụ -> Tùy chọn -> Gỡ lỗi -> Chung:

  • Chỉ tắt mã của tôi
  • Tắt bước qua thuộc tính và toán tử
  • Tắt yêu cầu tệp nguồn khớp chính xác với phiên bản gốc
  • Bật bước nguồn khuôn khổ .NET
  • Bật hỗ trợ máy chủ nguồn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.