2011-01-21 12 views
5

Tôi đang cố gắng khám phá công cụ WinDbg để phân tích sự cố đổ rác mà chúng tôi có trên máy chủ sản xuất của mình.Sự cố không được quản lý - giải quyết sự cố mã không được quản lý trong một ứng dụng .NET bằng cách sử dụng WinDbg

Khi tôi chạy !analyze -v, tôi nhận được:

0:000> !analyze -v 
******************************************************************************* 
*                    * 
*      Exception Analysis         * 
*                    * 
******************************************************************************* 

GetPageUrlData failed, server returned HTTP status 404 
URL requested: http://watson.microsoft.com/StageOne/w3wp_exe/7_0_6002_18005/49e03238/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1 

FAULTING_IP: 
+14935130 
00000000`00000000 ??    ??? 

EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff) 
ExceptionAddress: 0000000000000000 
    ExceptionCode: 80000003 (Break instruction exception) 
    ExceptionFlags: 00000000 
NumberParameters: 0 

FAULTING_THREAD: 00000000000029b0 

DEFAULT_BUCKET_ID: WRONG_SYMBOLS 

PROCESS_NAME: w3wp.exe 

ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached. 

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid 

MOD_LIST: <ANALYSIS/> 

NTGLOBALFLAG: 0 

APPLICATION_VERIFIER_FLAGS: 0 

MANAGED_STACK: !dumpstack -EE 
OS Thread Id: 0x29b0 (0) 
Child-SP   RetAddr   Call Site 

PRIMARY_PROBLEM_CLASS: WRONG_SYMBOLS 

BUGCHECK_STR: APPLICATION_FAULT_WRONG_SYMBOLS 

LAST_CONTROL_TRANSFER: from 000000007749c0b0 to 00000000775e6d5a 

STACK_TEXT: 
00000000`0012f6c8 00000000`7749c0b0 : 00000000`00000000 000007fe`faf07e6b 00000000`00000000 000007fe`f9c015f0 : ntdll!ZwWaitForSingleObject+0xa 
00000000`0012f6d0 000007fe`f9c03e74 : 00000000`00000158 00000000`ffb35de0 00000000`00000000 00000000`00000158 : kernel32!WaitForSingleObjectEx+0x9c 
00000000`0012f790 00000000`ffb3235a : 00000000`fffffffe 00000000`00000001 00000000`007e6400 00000000`0000008c : w3wphost!AppHostInitialize+0x280 
00000000`0012f7f0 00000000`ffb33b71 : 00000000`00000000 00000000`ffb33ce5 00000000`00000000 00000000`00000000 : w3wp!wmain+0x466 
00000000`0012f980 00000000`7748be3d : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : w3wp!PerfStopProvider+0x199 
00000000`0012f9c0 00000000`775c6a51 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : kernel32!BaseThreadInitThunk+0xd 
00000000`0012f9f0 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x1d 


STACK_COMMAND: ~0s; .ecxr ; kb 

FOLLOWUP_IP: 
w3wphost!AppHostInitialize+280 
000007fe`f9c03e74 f6052998000003 test byte ptr [w3wphost!g_dwDebugFlags (000007fe`f9c0d6a4)],3 

SYMBOL_STACK_INDEX: 2 

SYMBOL_NAME: w3wphost!AppHostInitialize+280 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: w3wphost 

IMAGE_NAME: w3wphost.dll 

DEBUG_FLR_IMAGE_TIMESTAMP: 49e0420f 

FAILURE_BUCKET_ID: WRONG_SYMBOLS_80000003_w3wphost.dll!AppHostInitialize 

BUCKET_ID: X64_APPLICATION_FAULT_WRONG_SYMBOLS_w3wphost!AppHostInitialize+280 

WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/w3wp_exe/7_0_6002_18005/49e03238/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1 

Followup: MachineOwner 

tôi thực sự có một thời gian khó khăn để tìm được những gì những gì. Từ những gì tôi hiểu, đây là phần thú vị:

EXCEPTION_CODE and STACK_TEXT. 

Tôi thực sự mới đối với WinDbg và đây là lần đầu tiên tôi sử dụng công cụ này. Tôi đã đấu tranh với tìm kiếm của Google, vì vậy tôi đoán tôi không tìm kiếm điều đúng.

Những gì tôi muốn làm là:

  1. Hiểu được định dạng đầu ra của stack_text
  2. Hãy thử để xem các thông số đầu vào của mỗi chức năng

Đó có phải là cách đúng đắn để tiếp cận vấn đề này?

+0

Tôi có cùng kết quả phân tích -v. Vui lòng cho tôi biết vấn đề là gì? – AlexMAS

Trả lời

9

Có một số hướng dẫn hay có sẵn trên web và ngay cả trong tệp trợ giúp WinDbg (.chm). Một địa điểm tốt sẽ là WinDBG tutorial - Introduction hoặc Tess' blog, If broken it is, fix it you should.

Trong trường hợp của bạn, bước 1 sẽ là trỏ WinDbg đến đúng biểu tượng. Rõ ràng từ đầu ra ở trên rằng giao lộ của bạn không chính xác hoặc không trỏ đến bất kỳ tệp PDB nào. Thực hiện các thao tác sau trong trình gỡ lỗi:

.sympath SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

Điều này sẽ chỉ trình gỡ lỗi sử dụng máy chủ biểu tượng công cộng của Microsoft cho các thành phần hệ điều hành; nó sẽ lưu các tập tin PDB vào thư mục c:\symbols của bạn. Để thêm một đường dẫn biểu tượng khác (ví dụ, thư mục chứa các tệp PDB của ứng dụng của bạn), bạn có thể sử dụng một ';' danh sách phân tách đường dẫn hoặc chỉ cần sử dụng lệnh .sympath+ để thêm đường dẫn mới theo từng phần.

Khi bạn thiết lập đường dẫn biểu tượng, hãy chạy lại !analyze -v hoặc làm theo các bước trong hướng dẫn ở trên để xem bạn có nhận được kết quả tốt hơn không.

+0

Cảm ơn bạn đã nhập. Tôi sẽ bắt đầu xem xét những hướng dẫn này ngay bây giờ. Mặc dù, tôi đã thiết lập đường dẫn biểu tượng trong WinDbg, vì vậy tôi ngạc nhiên khi bạn nói rằng chúng không được tải. Làm thế nào bạn nhìn thấy nó?Và bạn có biết vấn đề có thể là gì không? Đường dẫn được đặt thành đường dẫn hợp lệ trên máy tính của tôi và URL là chính xác. –

+1

Lệnh ".symfix" sẽ đặt đường dẫn biểu tượng thành máy chủ biểu tượng MS. Hãy thử "! Sym noisy" để nhận biểu tượng tra cứu lỗi. – Naveen

+1

Xin lỗi vì sự chậm trễ trong phản hồi. Có hai dấu hiệu bí mật của các ký hiệu sai. Đầu tiên, phân tích cho thấy thông điệp "WRONG_SYMBOLS" rõ ràng là vấn đề chính. Thứ hai, bù đắp cho các chức năng vào w3wp là một chút lớn (0x280 cho một, 0x199 cho khác). Như Naveen đã nói, sym ồn ào theo sau bởi một. Reload sẽ cho phép bạn để có được thông tin chi tiết về nơi mà nó tìm kiếm pdbs và tại sao nó không phải là. – nithins

5

Dấu vết ngăn xếp phải có thể đọc được nếu bạn có biểu tượng chính xác. Bạn có thể thử một cái gì đó như:

  1. Tải tệp kết xuất.
  2. Run .symfix
  3. Mở 'Biểu tượng File Path' đơn
  4. Thêm một đường dẫn đến file PDB ứng dụng của bạn
  5. Kiểm tra 'tải lại' hộp kiểm
  6. Run !clrstack -p để đổ đống với các thông số.