Trường hợp đầu ra System.Diagnostics.Debug.Write xuất hiện ở đâu?


146

Chương trình C # (được tích hợp csc hello.cs) sau đây chỉ in Hello via Console!trên bàn điều khiển và Hello via OutputDebugStringtrong cửa sổ DebugView. Tuy nhiên, tôi không thể thấy một trong các System.Diagnostics.*cuộc gọi. Tại sao vậy?

using System;
using System.Runtime.InteropServices;
class Hello {
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main() {
        Console.Write( "Hello via Console!" );
        System.Diagnostics.Debug.Write( "Hello via Debug!" );
        System.Diagnostics.Trace.Write( "Hello via Trace!" );
        OutputDebugString( "Hello via OutputDebugString" );
    }
}

Có thể có một số chuyển đổi dòng lệnh đặc biệt cần thiết cho csc?

Tôi không sử dụng Visual Studio cho bất kỳ sự phát triển nào của mình, đây là công cụ dòng lệnh thuần túy.


như đã đề cập tại một số bình luận trong một bài trả lời khác, có thể sử dụng DebugView của Microsoft (SysIternals): technet.microsoft.com/en-us/sysi
INTERNals / bb896647.aspx

Câu trả lời:


77

Như những người khác đã chỉ ra, người nghe phải được đăng ký để đọc những luồng này. Cũng lưu ý rằng Debug.Writesẽ chỉ hoạt động nếu DEBUGcờ xây dựng được đặt, trong khi Trace.Writesẽ chỉ hoạt động nếu TRACEcờ xây dựng được đặt.

Việc đặt DEBUGvà / hoặc TRACEcờ được thực hiện dễ dàng trong các thuộc tính dự án trong Visual Studio hoặc bằng cách cung cấp các đối số sau cho csc.exe

/define:DEBUG;TRACE


5
Nó rất hữu ích (tôi không mong đợi điều đó) khi tôi phát hiện ra rằng các đối tượng Debug và Trace sử dụng cùng một trình nghe theo dõi, do đó, cả Debug.Write và Trace.Write đều xuất phát đến cùng một vị trí, điều đó chỉ phụ thuộc vào với điều kiện họ có thể không được thực thi
hello_earth

1
bạn có thể giải thích những điều kiện họ đang có? chính xác tình huống nào một debug.Write sẽ không hoạt động giống như một track.write?
Pacerier

2
Điều này không hoạt động đối với tôi, tôi có các cờ gỡ lỗi và dấu vết được đặt trong các thuộc tính của dự án và đang sử dụng Debug.WriteLine, dòng thực thi, nhưng không có gì xuất hiện trong cửa sổ đầu ra, có ai có lời khuyên nào khác không?
F1wade

114

Trong khi gỡ lỗi System.Diagnostics.Debug.WriteLinesẽ hiển thị trong cửa sổ đầu ra ( Ctrl+ Alt+ O), bạn cũng có thể thêm a TraceListenervào Debug.Listenersbộ sưu tập để chỉ định Debug.WriteLinecác cuộc gọi đến đầu ra ở các vị trí khác.

Lưu ý: Debug.WriteLinecác cuộc gọi có thể không hiển thị trong cửa sổ đầu ra nếu bạn có tùy chọn Visual Studio "Chuyển hướng tất cả văn bản Cửa sổ đầu ra sang Cửa sổ ngay lập tức" được chọn trong menu Công cụTùy chọnGỡ lỗiChung . Để hiển thị " Công cụTùy chọnGỡ lỗi ", hãy chọn hộp bên cạnh " Công cụTùy chọnHiển thị tất cả cài đặt ".


4
Tôi muốn xác nhận rằng (Ctrl + Alt + O) sẽ hiển thị cửa sổ đầu ra trong khi gỡ lỗi trong Visual Studio 2012
Ishikawa

45

Bạn cần thêm một TraceListenerđể thấy chúng xuất hiện trên Bảng điều khiển.

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

Chúng cũng xuất hiện trong cửa sổ Visual Studio Output khi ở chế độ Gỡ lỗi.


2
Rõ ràng DebugView sẽ nắm bắt cả .NET Debug.Write () và Win32 OutputDebugString (): technet.microsoft.com/en-us/sysi
INTERNals / bb896647

@dlchambers: Tôi không nghĩ đó là chính xác. Trang đó tuyên bố hiển thị OutputDebugString()và (kernel)DbgPrint().
Mike C

1
@dlchambers: Tôi rút bình luận; Tôi phát hiện ra rằng DebugView có thể chụp Debug.Write() nếu cài đặt Capture của nó bao gồm "Global Win32" - yêu cầu chạy nó trong chế độ Quản trị viên.
Mike C

10

Trong khi bạn đang gỡ lỗi trong Visual Studio, hãy hiển thị cửa sổ "Đầu ra" (Xem-> Đầu ra). Nó sẽ hiển thị ở đó.


6

Các thông báo Chẩn đoán được hiển thị trong Cửa sổ đầu ra.


5

Khi tôi viết debug.write ("") trong mã, nó xuất ra trong "Cửa sổ ngay lập tức", chứ không phải "Cửa sổ đầu ra".

Bạn có thể thử nó. Để hiển thị cửa sổ "Ngay lập tức" ( Gỡ lỗiCửa sổNgay lập tức ).


2

Giải pháp cho trường hợp của tôi là:

  1. Nhấp chuột phải vào cửa sổ đầu ra;
  2. Kiểm tra 'Đầu ra chương trình'

0

Đối với VB.NET, áp dụng như sau. Bạn phải chọn "Gỡ lỗi" VÀ đảm bảo rằng bạn "Bắt đầu gỡ lỗi". Điều này có thể đạt được bằng cách nhấn F5.

Ngoài ra Console.WriteLine sẽ chỉ hiển thị các thông báo khi xây dựng dưới dạng "Phát hành" trong cửa sổ đầu ra của bạn.

Như đã đề cập trước đó, hãy mở cửa sổ đầu ra với Chế độ xemĐầu ra VÀ đảm bảo chọn "Xây dựng" nếu bạn muốn xem tin nhắn Console.WriteLine hoặc "Gỡ lỗi" nếu bạn muốn xem các tin nhắn Debug.WriteLine hoặc Trace.WriteLine.

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.