2012-02-21 37 views
12

tôi có thể nhớ rằng tôi có thể nhìn thấy giá trị trở lại của một phương pháp khi tôi debugC++ trong Visual Studio 6.0. Hiện tại, tôi thiếu tính năng đó tại C# trong Visual Studio 2010.
Tôi có thể thấy giá trị trả lại ở đâu hoặc có nguyên nhân không hiển thị không?gỡ lỗi trả lại giá trị

Edit1: Một ví dụ:

string GetFullName() 
{ 
    return GetFirstName() + " " + GetLastName(); 
} 

Khi tôi bước (debugger) từ hàng bắt đầu với trở tới dòng tiếp theo tôi muốn thấy tên đầy đủ trong một cửa sổ biến debug.

+1

Bạn có thể gọi phương thức trong cửa sổ Xem và xem giá trị trả lại ở đó. Ý bạn là vậy đúng không? –

+0

@sha Không có trong C + +, tôi có thể bước ra khỏi một phương pháp và giá trị trả lại được tự động liệt kê trong cửa sổ các biến gỡ lỗi. – brgerner

+0

Ồ, trong trường hợp này tôi sợ nó không được thực hiện. –

Trả lời

8

này đã được bổ sung trong Visual Studio 2013:

Giá trị trả lại được hiển thị trong “Autos Windows” (Debug-> Windows-> Autos) và bạn cũng có thể sử dụng biến giả “$ ReturnValue” trong cửa sổ Watch và/hoặc ngay lập tức để lấy lại hàm cuối cùng giá trị.

http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx

+0

Bạn có nhớ mô tả các giải pháp trong câu trả lời của mình không? Điều này sẽ tránh điều hướng ra khỏi SO và nó sẽ cung cấp cho một bản sao tĩnh trong trường hợp liên kết chết. – SandRock

+0

Bạn có thể thực hiện tương tự cho các trường hợp ngoại lệ bằng biến '$ exception'. Giống như cách chúng nhất quán trong đặt tên và trường hợp. Lam tôt lăm. – Will

3

Xem này: https://connect.microsoft.com/VisualStudio/feedback/details/555859/see-return-value-in-managed-code (và bạn có thể upvote nó)

Cũng có một comment có từ một chàng trai người đã phát triển một plugin cho VS để hỗ trợ đó.

Cập nhật. Đã thử plugin đó. Trông rất tuyệt.

+0

Cảm ơn bạn. Tôi sẽ thử trình cắm thêm. – brgerner

+0

Tôi đã thử plugin BugAid và nó hoạt động. Bạn cần đặt nó ở chế độ Full Mode để sử dụng tính năng xem lại. Đây là bản beta và bản phát hành chỉ miễn phí cho các dự án nguồn mở và MVP. – brgerner

+0

Tôi chỉ đọc tại trang chủ BigAid (http://www.bugaidsoftware.com/purchase/) rằng giấy phép comercial không phải là miễn phí mặc dù nó chỉ là bản beta. Vì vậy, tôi phải deinstall nó bởi vì tôi không thể tìm thấy bất kỳ gợi ý cho một phiên bản dùng thử cho người dùng comercial. – brgerner

1

Bạn không thể nhìn thấy giá trị trả về thấy có liên quan câu hỏi tương tự

Can I find out the return value before returning while debugging in Visual Studio

Bạn có thể lưu kết quả vào biến chuỗi vì vậy nó sẽ liệt kê trong cửa sổ gỡ lỗi.

enter image description here

class Program 
    { 
     static void Main(string[] args) 
     { 
      Program p = new Program(); 
      Console.WriteLine(p.GetFullName()); 
      Console.ReadLine(); 
     } 

     string GetFullName() 
     { 
      string result =GetFirstName() + " " + GetLastName(); 
      return result; 
     } 

     string GetFirstName() 
     { 
      string firstname = "vishwanath"; 
      return firstname; 
     } 

     string GetLastName() 
     { 
      string lastname = "Dalvi"; 
      return lastname; 
     } 
    } 
+0

Biến bổ sung chỉ là một tùy chọn cho các phương thức thường được gỡ lỗi. – brgerner

+0

@brgerner yeah true. –

+0

Tôi chỉ tìm thấy một câu hỏi liên quan khác trong danh sách * Liên quan * của trang này ở bên tay phải: http://stackoverflow.com/questions/1704268/getting-a-methods-return-value-in-the-vs-debugger . Dường như tìm kiếm SO trong khi nhập câu hỏi không tốt hơn danh sách * Related *. Tôi đoán câu hỏi-tìm-hỏi không quan tâm đến trường thẻ. – brgerner

3

Bạn có thể đặt một breakpoint trên dòng của câu lệnh return với phương pháp này. Sau đó, nhấp chuột phải vào điểm ngắt và chọn 'Khi nhấn ...'. Tại đây bạn có thể chọn hiển thị một tin nhắn hoặc chạy một macro. Đối với điều này, chúng tôi sẽ in một thông báo sẽ được hiển thị trong cửa sổ đầu ra. Ví dụ, nếu bạn đã mã sau:

public double ReturnValue() 
{ 
    var x = 3; 
    var y = 4; 
    //x and y can of course be non-constant vars too 
    return Calculate(x, y); 
} 

public static double Calculate(int x, int y) 
{ 
    return x * x + y * y; 
} 

Nếu bạn đặt một breakpoint trên dòng "return Tính (x, y);", kích chuột phải vào nó và chọn 'Khi Hit ...' và chọn này như thông điệp:

Giá trị là: {Tính (x, y)}

Trong trường hợp này Output Window sẽ hiển thị:

Giá trị là: 25.0

Hy vọng điều này sẽ hữu ích!

Cập nhật:

này cũng làm việc cho ví dụ của bạn với những tên tuổi, các phương pháp:

public string GetFirst() 
{ 
    return "Bill"; 
} 

public string GetLast() 
{ 
    return "Gates"; 
} 

public string GetFull() 
{ 
    return GetFirst() + " " + GetLast(); 
} 

Đặt breakpoint trên báo cáo kết quả lợi nhuận trong phương pháp GetFull() và làm tương tự như trước đây .Thông điệp thân bây giờ trông như thế này:

Họ và tên là: {GetFirst() + "" + GetLast()}

Và Output Window sẽ hiển thị:

Họ và tên là: "Bill Gates"

+0

Cảm ơn bạn. Giải pháp này có tốt hơn là viết cuộc gọi trong cửa sổ Xem không? Tôi đoán nhập cuộc gọi trong cửa sổ Xem nhanh hơn. – brgerner

+1

Vấn đề với Đồng hồ là bạn phải đặt điểm ngắt và trong khi gỡ lỗi, hãy chọn phương thức và chọn 'thêm đồng hồ'. Bạn không thể nhấp chuột phải vào cuộc gọi phương thức và chọn 'thêm đồng hồ' vì điều này đưa ra lỗi trong Giá trị của đồng hồ. Các 'thiết lập' của giải pháp của tôi mất lâu hơn một chút nhưng khi gỡ lỗi bạn không có mối quan tâm nhiều hơn nữa. Tôi vừa đưa ra một giải pháp để ngay lập tức xem giá trị trả lại của một cuộc gọi phương thức như bạn đã yêu cầu ... :) – Abbas

+0

Tôi nhận được quan điểm của bạn, cảm ơn bạn! – brgerner

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