2014-10-14 14 views
8

Tôi gặp sự cố khi gỡ lỗi ... Đột nhiên, tôi không thể thấy giá trị của hầu hết các biến trong khi gỡ lỗi. tôi đã quản lý để nhận được hai thông điệp khác nhau trong cửa sổ Immediate:Không thể nhận được giá trị vì nó đã được tối ưu hóa

Không thể lấy được giá trị của 'tham số' địa phương hoặc đối số như nó không phải là có sẵn tại con trỏ hướng dẫn này, có thể bởi vì nó đã được tối ưu hóa đi.

Lỗi nội bộ trong các đánh giá biểu hiện.

Tôi đã thử và kiểm tra những điều sau đây:

  1. Giải pháp cấu hình được thiết lập để debug (không phát hành)
  2. Project -> Settings -> Build -> Tối ưu hóa code đang không phải đặt
  3. Công cụ -> Tùy chọn -> Gỡ lỗi -> Sử dụng Chế độ tương thích được quản lý (không hoạt động)

Bạn có thêm bất kỳ ý tưởng nào về cách tôi có thể gỡ lỗi đúng cách không? :(

Cảm ơn trước

Sửa Mã này được gì đặc biệt .. nó xảy ra khi tôi cố gắng để xem những gì bên trong tham số [Key]

public void AddOrUpdateQuartzJob(string jobName, IList<KeyValuePair<string, string>> parameters) 
    { 
     var jobDetail = this.GetJobDetail(jobName); 

     if (jobDetail != null) 
     { 
      foreach (var parameter in parameters) 
      { 
       jobDetail.JobDataMap[parameter.Key] = parameter.Value; 
      } 
     } 
     else 
     { 
      this.ScheduleNewJob(jobName, parameters); 
     } 
    } 
+0

Bạn có thể chia sẻ mã không? – Amorphis

+0

Có, tôi đã chỉnh sửa bài gốc – xeraphim

+0

khi bạn đang ở "if (jobDetail! = Null)". Có gì trong các thông số ngay trước khi xảy ra sự cố? –

Trả lời

5

Cách tốt nhất mà tôi đã được tìm thấy để convince the JIT compiler not to optimize the code is to use an INI file with the name of the assembly in the same folder the assembly is in with the contents:

[.NET Framework Debugging Control] 
GenerateTrackingInfo=1 
AllowOptimize=0 

Lưu ý rằng đó phải là tên của hội đồng chứ không phải là tôi của quá trình EXE (trừ khi nó là hội đồng EXE bạn muốn gỡ lỗi). Ví dụ. nếu bạn có một assembly MyCode.dll thì tên tập tin INI sẽ là MyCode.ini.

Dưới đây là một số slide từ a presentation on .Net debugging mà thấy sự khác biệt:

Với Tối ưu hóa:

Debugging with optimization

Without Tối ưu hóa:

Debugging without optimization

1

Đi tới -> Thuộc tính dự án -> trong phần Xây dựng -> đặt hộp kiểm "Tối ưu hóa mã" được bỏ chọn.

Ngoài ra, Theo Project Properties -> Build -> Advanced -> thiết lập các "Debug Info" thả xuống để "Full" trong Options

0

Sau khi thực hiện những thay đổi được liệt kê bởi codekaizen và isanka thalagala, đừng quên để làm sạch, xây dựng lại và xuất bản để thực hiện các thay đổi hiệu quả.

Các vấn đề liên quan