Mã thoát chuỗi là gì?


115

Chính xác thì mã thoát chuỗi trong cửa sổ Đầu ra trong khi gỡ lỗi là gì? Nó cung cấp cho tôi thông tin gì? Nó có hữu ích bằng cách nào đó hay chỉ là một thứ nội bộ không nên làm phiền tôi?

The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).

Có thể có một số loại danh sách các mã thoát có thể có cùng với ý nghĩa của nó?

Câu trả lời:


100

Thực sự dường như không có nhiều lời giải thích về chủ đề này nhưng các mã thoát được cho là được sử dụng để đưa ra dấu hiệu về cách luồng thoát ra, 0có xu hướng có nghĩa là nó thoát ra một cách an toàn trong khi bất kỳ thứ gì khác có nghĩa là nó đã không. không thoát như mong đợi. Nhưng sau đó mã thoát này có thể được đặt trong mã của chính bạn để hoàn toàn bỏ qua điều này.

Liên kết gần nhất mà tôi có thể tìm thấy hữu ích để biết thêm thông tin là cái này

Trích dẫn từ liên kết trên:

Phương thức thoát bao giờ, số nguyên mà bạn trả về từ quy trình hoặc chuỗi của mình phải là giá trị từ 0-255 (8bits). Giá trị 0 cho biết thành công, trong khi giá trị khác 0 cho biết thất bại. Mặc dù, bạn có thể cố gắng trả về bất kỳ giá trị số nguyên nào dưới dạng mã thoát, chỉ byte thấp nhất của số nguyên được trả về từ quy trình hoặc chuỗi của bạn như một phần của mã thoát. Các byte bậc cao được hệ điều hành sử dụng để truyền tải thông tin đặc biệt về quy trình. Mã thoát rất hữu ích trong các chương trình batch / shell thực thi các chương trình khác có điều kiện tùy thuộc vào sự thành công hay thất bại của một chương trình đó.


Từ Tài liệu cho GetEXitCodeThread

Quan trọng Hàm GetExitCodeThread chỉ trả về mã lỗi hợp lệ do ứng dụng xác định sau khi luồng kết thúc. Do đó, ứng dụng không được sử dụng STILL_ACTIVE (259) làm mã lỗi. Nếu một chuỗi trả về STILL_ACTIVE (259) dưới dạng mã lỗi, các ứng dụng kiểm tra giá trị này có thể hiểu nó có nghĩa là chuỗi vẫn đang chạy và tiếp tục kiểm tra xem có hoàn thành chuỗi sau khi kết thúc chuỗi hay không, điều này có thể khiến ứng dụng vào một vòng lặp vô hạn.


Sự hiểu biết của tôi về tất cả những điều này là mã thoát không quan trọng lắm nếu bạn đang sử dụng các chuỗi trong ứng dụng của riêng bạn cho ứng dụng của riêng bạn. Ngoại lệ cho điều này có thể xảy ra nếu bạn đang chạy một vài luồng cùng một lúc có sự phụ thuộc vào nhau. Nếu có yêu cầu nguồn bên ngoài đọc mã lỗi này, thì bạn có thể đặt nó để cho các ứng dụng khác biết trạng thái luồng của bạn.


1
Có cách nào để loại bỏ nó khỏi cửa sổ Đầu ra không?
Arne Evertsson

26
@ArneEvertsson - Nếu bạn truy cập Công cụ | Tùy chọn ... trong khu vực "Gỡ lỗi \ Cửa sổ đầu ra", có cài đặt "Thông báo thoát chuỗi" (Bật | Tắt).
josh poley

2
Điều này có thể có nghĩa là bạn đang sử dụng các phương thức không đồng bộ trong luồng chính của ứng dụng đồng bộ và không đợi chúng kết thúc. Cách đơn giản nhất để đối phó với điều này là để gọi Chờ () trên một nhiệm vụ bắt đầu và được trả về bởi phương pháp khác như thể hiện trong mẫu này: asp.net/web-api/overview/advanced/... RunAsync().Wait();
Bron Davies

1
@BronDavies luồng nhóm luồng thoát với mã lỗi 259 ngay cả sau khi gọi Wait (). Đây là mã của tôi: static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }Vấn đề là, Các tác vụ được thực thi bởi các luồng của nhóm luồng và dựa trên kinh nghiệm của nhóm luồng, nó có thể không kết thúc luồng ngay cả khi nhiệm vụ của bạn đã hoàn thành. Luồng chỉ đơn giản quay trở lại nhóm luồng chờ được giao nhiệm vụ tiếp theo. Và đó là lý do tại sao mã thoát STILL_ACTIVE (259) nghe rất trực quan ở đây.
RBT

Bài báo trong liên kết là sai. Không có yêu cầu rằng mã thoát luồng (hoặc mã thoát quy trình, đối với vấn đề đó) chỉ là một byte duy nhất.
Harry Johnston

55

Như Sayse đã đề cập, mã thoát 259 (0x103)có ý nghĩa đặc biệt, trong trường hợp này, quá trình được gỡ lỗi vẫn đang chạy.

Tôi đã thấy điều này rất nhiều với gỡ lỗi các dịch vụ web, bởi vì chuỗi tiếp tục chạy sau khi thực hiện mỗi cuộc gọi dịch vụ web (vì nó vẫn đang lắng nghe các cuộc gọi tiếp theo).


7
Thông tin thêm .. nói chung là bất kỳ chủ đề đó thuộc sở hữu của hồ bơi thread sẽ thoát ra với 259. Xem: stackoverflow.com/questions/21632584/...
Skrymsli

Tôi đã tự hỏi điều này có nghĩa là gì và câu trả lời của bạn chính xác là những gì tôi đã thấy khi chạy ứng dụng bảng điều khiển C # của mình. Cảm ơn!
kayleeFrye_onDeck

0

điều đã xảy ra với tôi là tôi có nhiều dự án trong giải pháp của mình. Tôi muốn gỡ lỗi dự án 1, tuy nhiên, dự án 2 được đặt làm dự án bắt đầu mặc định. Tôi đã sửa lỗi này bằng cách, nhấp chuột phải vào dự án và chọn "Đặt làm dự án khởi động", sau đó chạy gỡ lỗi là ổn.


1
Tôi không thấy thông báo gỡ lỗi trong cửa sổ Đầu ra là vấn đề. Tôi chỉ tò mò chúng là gì, không phải làm thế nào để loại bỏ chúng.
Ondrej Janacek
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.