2008-12-19 34 views
23

Tôi đang triển khai các giải pháp ASP.NET và Web Service cho IIS để phát triển máy chủ . Dường như người cuối cùng đã thực hiện công việc này cũng đã triển khai tất cả các tệp .pdb. Tôi hỏi về nó, và được cho biết rằng họ "cung cấp thông tin dấu vết stack tốt hơn trong các bản ghi" nếu chúng còn lại trên máy chủ.Triển khai tệp .PDB trong IIS. Bất kỳ lợi ích nào?

Có sự thật nào về điều này không? Tôi đã luôn bỏ chúng lại, không bao giờ triển khai chúng đến bất cứ nơi nào khác ngoài máy địa phương của tôi.

Đối với một máy chủ IIS phát triển nội bộ (không phải sản xuất, không thể truy cập vào thế giới bên ngoài) có bất kỳ lý do nào để hoặc không triển khai tệp .pdb không? Có điều gì xấu có thể xảy ra không? Họ có thực sự mang lại lợi ích gì không?

Trả lời

26

Nếu bạn đang đăng nhập ngoại lệ, sau đó triển khai các tập tin PDB đảm bảo rằng các trường hợp ngoại lệ bao gồm số dòng (vì vậy Steven A. Lowe đã thông báo với tôi nhiều lần;))

+0

Vì vậy, những gì xây dựng một ứng dụng trong Release vs Debug làm gì? có gì không? Tôi đã quen với thế giới Java, nơi biên dịch gỡ lỗi chèn dòng # s và thông tin gỡ lỗi khác trực tiếp vào các tệp .class. – CodingWithSpike

+1

Liên kết tại đây: http://social.msdn.microsoft.com/Diễn đàn/en-US/clr/thread/4de6861f-e723-4def-bcaf-aa717a3e1897/ Tóm tắt trong Gỡ lỗi: Không tối ưu hóa, [Debuggable] thuộc tính được thêm vào, PDB được triển khai, #IF DEBUG có điều kiện được biên dịch bao gồm, #IF RELEASE mã không được bao gồm. –

+1

+1 để đánh vần tên của tôi đúng ;-) –

8

triển khai PDB file là hữu ích nếu bạn muốn điều khiển từ xa debug ứng dụng của bạn.

có một bài viết MSDN here giải thích quá trình

38

tôi luôn luôn tìm các tập tin PDB chỉ được sử dụng bởi các chương trình gỡ rối. Nếu thời gian chạy luôn kiểm tra chúng để biết thông tin gỡ lỗi, điều đó có nghĩa là thực thi chậm hơn khi ném một ngoại lệ, bởi vì nó phải đọc tệp .pdb, phải không?

Vì vậy, tôi đã thực hiện một thử nghiệm nhanh:

using System; 
using System.Text; 

namespace PdbSpeedTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DateTime start = DateTime.Now; 
      try 
      { 
       Program p = new Program(); 
       p.Looper(0); 
      } 
      catch (NotImplementedException e) 
      { 
       Console.WriteLine(e.StackTrace); 
      } 
      TimeSpan span = DateTime.Now - start; 
      Console.WriteLine(span.TotalMilliseconds.ToString()); 
     } 

     internal void Looper(int x) 
     { 
      try 
      { 
       if (x < 100) 
        Looper(x + 1); 
       else 
        throw new NotImplementedException("blah!"); 
      } 
      catch (NotImplementedException e) 
      { 
       throw new NotImplementedException("blah!", e); 
      } 
     } 
    } 
} 

chỉ này recurses 100 cấp độ sâu và ném một ngoại lệ. Bây giờ cho kết quả thời gian chạy:

Chạy như một debug build với các PDB trong cùng thư mục:

C:\Work\PdbSpeedTest\bin\Debug>PdbSpeedTest.exe 
    at PdbSpeedTest.Program.Looper(Int32 x) in C:\Work\PdbSpeedTest\Program.cs:line 37 
    at PdbSpeedTest.Program.Main(String[] args) in C:\Work\PdbSpeedTest\Program.cs:line 16 
31.2504 

Chạy như một debug build mà không các PDB:

C:\Work\PdbSpeedTest\bin\Debug>PdbSpeedTest.exe 
    at PdbSpeedTest.Program.Looper(Int32 x) 
    at PdbSpeedTest.Program.Main(String[] args) 
15.6252 

Chạy dưới dạng release xây dựng với các PDB:

C:\Work\PdbSpeedTest\bin\Release>PdbSpeedTest.exe 
    at PdbSpeedTest.Program.Looper(Int32 x) in C:\Work\PdbSpeedTest\Program.cs:line 37 
    at PdbSpeedTest.Program.Main(String[] args) in C:\Work\PdbSpeedTest\Program.cs:line 16 
31.2504 

Chạy như một thông cáo xây dựng mà không các PDB:

C:\Work\PdbSpeedTest\bin\Release>PdbSpeedTest.exe 
    at PdbSpeedTest.Program.Looper(Int32 x) 
    at PdbSpeedTest.Program.Main(String[] args) 
15.6252 

Chúng được chạy từ một dấu nhắc lệnh cũ thường xuyên, không phải bên trong Visual Studio. Vì vậy, các .pdb chắc chắn không thêm stack theo dõi thông tin, và làm chậm xử lý ngoại lệ. Rất thú vị!

+4

Nghiên cứu hay :) +1 –

+0

thực sự tốt để tìm hiểu – erdogany

+4

Có thể cần nhấn mạnh ** rằng thực thi chậm hơn chỉ xảy ra với ngoại lệ - nếu không thì hiển thị là tệp .pdb làm tổn thương hiệu suất, thậm chí với bản phát hành bản phát hành. Tôi không tin rằng hiệu suất bị ảnh hưởng nếu mã của bạn đang chạy trơn tru mà không có ngoại lệ (đó là lý do tại sao bạn không nên sử dụng viết mã sử dụng ngoại lệ cho kiểm soát chi nhánh bình thường). –

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