Không thể có được giá trị của cục bộ hoặc đối số vì nó không có sẵn tại con trỏ lệnh này, có thể vì nó đã được tối ưu hóa đi


211

Visual Studio 2010 giết dữ liệu (không có từ nào khác) trong một trong các đối số của hàm trong khối không an toàn. Điều gì có thể gây ra lỗi này? Thông báo sau cho thấy bởi trình gỡ lỗi.

Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.

2
tôi có cùng một vấn đề và tôi đang sử dụng bản dựng Debug. Cannot obtain value of local or argument '<this>' as it is not available at this instruction pointer, possibly because it has been optimized away. System.Threading.Tasks.TaskExceptionHolder
javapowered

19
Rất tiếc, tôi vừa phát hành do nhầm lẫn ..
Daniel Little

Tôi đang gặp vấn đề này trong VS 2017 và tôi đã làm theo tất cả các hướng dẫn trong các bài viết dưới đây. Có sự lựa chọn nào khác không?
Matt W

Đừng quên Menu Build -> Trình quản lý cấu hình. Cấu hình cần được đặt thành Gỡ lỗi ở đó hoặc bạn vẫn gặp sự cố.
Bob Clegg

Câu trả lời:


343

Chuyển đến Thuộc tính dự án và bên dưới Bản dựng Đảm bảo rằng hộp kiểm "Tối ưu hóa mã" không được chọn.

Ngoài ra, đặt menu thả xuống "Thông tin gỡ lỗi" thành "Đầy đủ" trong Tùy chọn nâng cao (Trong tab Xây dựng).


128
Trước tiên, hãy kiểm tra xem Cấu hình bản dựng là Gỡ lỗi chứ không phải Bản phát hành.
ApceH Hypocrite

Nhân tiện, nếu bạn muốn kiểm tra nó trong chế độ Phát hành, bạn có thể thêm "Debugger.Launch ();" trong mã
Jason

Đã thực hiện cả hai bước và thay đổi cấu hình từ "Phát hành" thành "Xây dựng". Đã làm việc trên Visual Studio 2017 Community Edition.
Neo

1
Nếu bạn có VS 2017 cả câu trả lời được chấp nhận và câu trả lời của xyq.384.b sẽ giúp ích. Đối với tôi, câu trả lời xyq.384.b là cách khắc phục vì đó là trình gỡ lỗi JIT đang đàn áp con trỏ ... Tôi xin lỗi JIT đã "tối ưu hóa" nó ...
BillRuhl

Sau khi chuyển sang cấu hình gỡ lỗi, tôi phát hiện ra hộp mã tối ưu hóa đã bị bỏ chọn. Bài học rút ra: Đừng gỡ lỗi trong chế độ cấu hình phát hành.
eliteproxy

135

Ngoài ra trong phiên bản cộng đồng VS 2015

đi đến Gỡ lỗi-> Tùy chọn hoặc Công cụ-> Tùy chọn

và kiểm tra Gỡ lỗi-> Chung-> Bỏ tối ưu hóa JIT khi tải mô-đun (Chỉ quản lý)


7
Điều này đã giải quyết vấn đề của tôi sau khi đã áp dụng tất cả các giải pháp được đề cập ở trên.
masih

1
Không có câu trả lời gợi ý nào phù hợp với tôi. Các biến của tôi vẫn được tối ưu hóa ...
Sushi271

Không biết tại sao điều này chỉ đột nhiên bắt đầu xảy ra .. nhưng điều này đã sửa nó!
Murphybro2

Chúa ơi, cái này cũng đã sửa nó cho tôi trong Cộng đồng VS2017! Không biết khi nào hoặc làm thế nào tùy chọn này được bỏ chọn ...
Ian Kemp

Hoạt động như một nhà vô địch!
BillRuhl

59

Nếu bạn biên dịch với tối ưu hóa được kích hoạt, thì nhiều biến sẽ bị xóa; ví dụ:

SomeType value = GetValue();
DoSomething(value);

ở đây, biến cục bộ valuethường sẽ bị xóa, thay vào đó giữ giá trị trên ngăn xếp - hơi giống như bạn đã viết:

DoSomething(GetValue());

Ngoài ra, nếu một giá trị trả về hoàn toàn không được sử dụng , thì nó sẽ bị loại bỏ thông qua "pop" (thay vì được lưu trữ trong một địa phương thông qua "stloc", và một lần nữa; địa phương sẽ không tồn tại).

Do đó, trong bản dựng như vậy, trình gỡ lỗi không thể nhận được giá trị hiện tại valuenó không tồn tại - nó chỉ tồn tại trong thời gian ngắn giữa GetValue()DoSomething(...).

Vì thế; nếu bạn muốn gỡ lỗi ... đừng sử dụng bản phát hành! hoặc ít nhất, vô hiệu hóa tối ưu hóa trong khi bạn gỡ lỗi.


4
Cảm ơn câu trả lời của bạn - nhưng tôi kiểm tra Tối ưu hóa thuộc tính mã trong dự án của tôi và nó không được chọn = (
tò mò

4
@Marc - Tôi hiểu những gì bạn đang nói, tuy nhiên, tôi đang sử dụng các thư viện nguồn tham chiếu của microsoft để mã hóa thông qua crap của riêng họ. Bây giờ tôi đang thực hiện các phương pháp, nhưng dường như tôi không thể xem bất kỳ giá trị nào của Người dân địa phương. Điểm gỡ lỗi của nguồn .Net là gì? Bất kỳ đề xuất? stackoverflow.com/questions/13147132/
trộm

Tôi dường như đang làm điều tương tự như @ one.beat.consumer: cố gắng bước qua các biểu tượng công khai của Microsoft để hiểu lý do tại sao khung công tác ASP.NET không hoạt động. Trong trường hợp của tôi, mô hình ràng buộc trong MVC 3 ...
bambams

@ one.beat. kích hoạt. Đó là dự án cụ thể (dll) - nếu bạn có thể nhận được các phiên bản "gỡ lỗi" của các tham chiếu MS thì bạn có thể thấy các giá trị. Đừng quên rằng nếu MS dll được tham chiếu bởi một dự án khác mà dự án chính của bạn đang tham chiếu, thì "phần phụ" có thể khớp với các cài đặt của dự án khác.
drzaus

22

http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html

Điều này làm việc cho tôi trong studio hình ảnh 2013.

Tât cả nhưng điêu bạn phải lam la..

  1. Nhấp chuột phải vào dự án mà bạn không thể gỡ lỗi.
  2. Tới chủ dự án.
  3. Bấm vào menu xây dựng.
  4. Bấm vào nút nâng cao.
  5. Đặt giá trị thả xuống thông tin gỡ lỗi thành đầy đủ.
  6. Xây dựng lại dự án của bạn.

20

Tôi chỉ chạy vào đây và tôi đang chạy theo Releasecấu hình xây dựng thay vì Debugcấu hình xây dựng. Khi tôi quay trở lại Debugbiến của tôi hiển thị trong đồng hồ một lần nữa.



8

Khi tôi gặp phải vấn đề tương tự, tôi chỉ phải làm sạch giải pháp của mình trước khi xây dựng lại. Điều đó đã chăm sóc nó cho tôi.


6

Liên quan đến vấn đề với thuộc tính "Tối ưu hóa mã" chưa được UNCHECKED nhưng mã vẫn biên dịch là tối ưu hóa: Điều cuối cùng đã giúp tôi sau khi thử mọi thứ là kiểm tra hộp kiểm "Bật gỡ lỗi mã không được quản lý" trên cùng trang cài đặt (Thuộc tính dự án - Gỡ lỗi). Nó không liên quan trực tiếp đến tối ưu hóa mã, nhưng với tính năng này được bật, VS không còn tối ưu hóa thư viện của tôi và tôi có thể gỡ lỗi.


1
Đề nghị thứ hai làm cho tất cả hoạt động một lần nữa cảm ơn bạn!
CodeMilian

1
Trong VS 2015, tôi không thấy Enable unmanaged code debugging. Có Enable native code debugging, tôi đã thử kiểm tra điều này nhưng nó không có gì khác biệt.
Al Lelopath

1
Trong VS 2015, tôi đã kiểm tra Kích hoạt "Mã gốc" trong quá trình xây dựng dự án, Web, Trình gỡ lỗi và tất cả đều hoạt động.
Mouffette

6

Tôi đã phải đối mặt với cùng một vấn đề và giải pháp cho tôi là thay đổi Solution Configurationtừ Releasesang Debug. Hy vọng nó giúp


4

Trong trường hợp của tôi, tôi đang làm việc với một dự án api web và mặc dù dự án được đặt chính xác thành gỡ lỗi hoàn toàn, tôi vẫn thấy lỗi này mỗi khi tôi gắn vào quy trình IIS mà tôi đang cố gắng gỡ lỗi. Sau đó, tôi nhận ra hồ sơ xuất bản được thiết lập để sử dụng cấu hình Phát hành. Vì vậy, một nơi nữa để kiểm tra là hồ sơ xuất bản của bạn nếu bạn đang sử dụng tính năng 'Xuất bản' của dự án api web dotnet của bạn.


3

Tôi thấy rằng tôi gặp vấn đề tương tự khi tôi đang chạy một dự án và gỡ lỗi bằng cách đính kèm vào một quy trình IIS. Tôi cũng đang chạy trong chế độ Gỡ lỗi với tắt tối ưu hóa. Trong khi tôi nghĩ mã được biên dịch tốt, khi tôi tách ra và cố gắng biên dịch, một trong những tài liệu tham khảo không được tìm thấy. Điều này là do một nhà phát triển khác ở đây đã thực hiện sửa đổi và thay đổi vị trí của tài liệu tham khảo. Tham chiếu không hiển thị với biểu tượng cảnh báo, vì vậy tôi nghĩ mọi thứ đều ổn cho đến khi tôi thực hiện việc biên dịch. Sau khi sửa tham chiếu và chạy lại, nó hoạt động.


1

Là một câu trả lời bổ sung cho những người gặp phải vấn đề này khi gỡ lỗi ứng dụng web của trang web Azure:

Khi triển khai từ GitHub, ví dụ, mã được biên dịch trong máy chủ Azure tối ưu hóa theo mặc định.

Tôi bảo máy chủ biên dịch theo cách có thể sửa lỗi bằng cách đặt SCM_BUILD_ARGSthành/p:Configuration=Debug

nhưng có nhiều lựa chọn hơn. Thấy điều này: http://azure.microsoft.com/blog/2014/05/08/introduction-to-remote-debugging-on-azure-web-sites-part-3-multi-instance-environment-and-git /


1

Trong Visual Studio 2012:

Chuyển đến thuộc tính dự án -> Gỡ lỗi -> Bỏ chọn "Kích hoạt quy trình lưu trữ Visual Studio"


1

Đối với các ứng dụng web, có một vấn đề quan trọng khác và đó là chọn cấu hình chính xác trong quá trình xuất bản ứng dụng.

Bạn có thể xây dựng ứng dụng của mình ở chế độ gỡ lỗi, nhưng có thể xảy ra khi bạn xuất bản nó ở chế độ phát hành, mặc định mã này theo mặc định nhưng IDE có thể đánh lừa bạn vì nó hiển thị chế độ gỡ lỗi trong khi mã được xuất bản ở chế độ phát hành. Bạn có thể xem chi tiết trong ảnh chụp nhanh bên dưới: nhập mô tả hình ảnh ở đây


0

Kiểm tra xem bạn có thuộc tính Debuggable trong tệp lắp ráp của bạn không. Nếu có, loại bỏ nó và xây dựng lại giải pháp của bạn để xem các biến cục bộ có sẵn không.

Thuộc tính gỡ lỗi của tôi đã được đặt thành: DebuggableAttribution.DebuggingModes.IgnoreSymbolStoreSequencePoints mà theo bài viết MSDN này cho trình biên dịch JIT sử dụng tối ưu hóa. Tôi đã xóa dòng này khỏi tệp BangInfo.cs của tôi và các biến cục bộ có sẵn.


0

Trong Visual Studio 2017 hoặc 2015:

Đi đến Giải pháp nhấp chuột phải vào giải pháp, sau đó chọn Thuộc tính-> chọn tất cả Cấu hình-> Gỡ lỗi sau đó nhấp OK. Sau đó Rebuild và Run, giải pháp này hiệu quả với tôi.


0

Tôi gặp vấn đề tương tự. Đã thử tất cả những điều trên và thấy rằng tôi cũng phải xóa tất cả mọi thứ bên trong {PRO DỰ_ROOT} \ bin \ Release \ netcorản2.2 và {PRO DỰ_ROOT} \ obj \ Release \ netcorản2.2 cho dự án của tôi. Nó chắc chắn liên quan đến xuất bản vì mặc dù tôi sử dụng các công cụ triển khai / bitbucket trên Ứng dụng web Azure của mình, tôi đã thử Build >> Publish >> Xuất bản lên Azure vì tôi muốn kiểm tra tệp nào được triển khai thực sự.


0

Có cùng một vấn đề trước đây với một ứng dụng WPF và tất cả các giải pháp ở đây KHÔNG giải quyết được vấn đề . Vấn đề là Mô-đun đã được tối ưu hóa nên các giải pháp sau KHÔNG LÀM VIỆC (hoặc không đủ để giải quyết vấn đề):

  • Hộp kiểm " Tối ưu hóa mã " chưa được kiểm tra
  • Đã kiểm tra " Bỏ tối ưu hóa JIT khi tải mô-đun "
  • Cấu hình giải pháp trên DEBUG

Các mô-đun vẫn được tải Tối ưu hóa. Xem ảnh chụp màn hình sau: Mô-đun được tối ưu hóa


Để GIẢI QUYẾT vấn đề này, bạn phải xóa mô-đun được tối ưu hóa. Để tìm đường dẫn mô-đun được tối ưu hóa, bạn có thể sử dụng một công cụ như Process Hacker .

Nhấp đúp vào chương trình của bạn trong " Bảng quy trình ", sau đó trong cửa sổ mới mở tab " .NET Assemblies ". Sau đó, trong cột " Đường dẫn hình ảnh gốc ", bạn tìm thấy tất cả các đường dẫn mô-đun được Tối ưu hóa . Xác định vị trí bạn muốn tối ưu hóa và xóa thư mục (xem ảnh chụp màn hình bên dưới): nhập mô tả hình ảnh ở đây (Tôi làm mờ tên công ty của mình vì lý do rõ ràng)

Khởi động lại ứng dụng của bạn (với hộp kiểm ở bước 1 được chọn chính xác) và nó sẽ hoạt động.

Lưu ý : Tệp có thể bị khóa vì nó được mở bởi một quy trình khác, hãy thử đóng Visual Studio. Nếu tệp vẫn bị khóa, bạn có thể sử dụng chương trình như Lock Hunter

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.