Tôi đã có một loạt các minidumps được ghi lại trong thời gian chạy của một ứng dụng thông qua MiniDumpWriteDump. Các minidumps được tạo ra trên một máy tính với một phiên bản hệ điều hành khác với máy phát triển của tôi.Làm thế nào để trích xuất dấu vết ngăn xếp từ minidumps?
Bây giờ tôi đang cố gắng viết chương trình trích xuất các dấu vết ngăn xếp từ các minidumps, sử dụng dbghelp.dll. Tôi đang đi bộ MINIDUMP_MODULE_LIST và gọi cho SymLoadModule64, nhưng điều này không tải xuống pdbs (kernel32, vv) từ máy chủ biểu tượng công khai. Nếu tôi thêm "C: \ Windows \ System32" vào đường dẫn biểu tượng, nó sẽ tìm thấy các dll và tải xuống các ký hiệu, nhưng tất nhiên chúng không khớp với các dll từ minidump, do đó kết quả là vô ích.
Vậy làm cách nào để yêu cầu dbghelp.dll tải xuống và sử dụng đúng pdbs?
[sửa]
Tôi quên nói rằng SymLoadModule64 chỉ mất một tên tập tin và không có thông tin phiên bản/checksum, vì vậy rõ ràng với SymLoadModule64 một mình nó không thể cho dbghelp để tìm ra pdb để tải về.
Thông tin thực sự có sẵn trong MINIDUMP_MODULE_LIST nhưng tôi không biết cách chuyển nó trở lại API dbghelp.
Có SymLoadModuleEx có tham số bổ sung, nhưng tôi không có ý tưởng nếu đó là những gì tôi cần hoặc những gì tôi nên vượt qua cho các tham số bổ sung.
[sửa]
Không may mắn cho đến nay, mặc dù tôi đã nhận thấy có cũng dbgeng.dll phân phối cùng với dbghelp.dll trong SDK gỡ lỗi. MSDN trông khá tốt tài liệu và nói rằng nó là động cơ tương tự như sử dụng windbg. Có lẽ tôi có thể sử dụng nó để trích xuất các dấu vết ngăn xếp.
Nếu bất cứ ai có thể chỉ cho tôi một số giới thiệu về cách sử dụng dbgeng.dll để xử lý minidumps có lẽ sẽ giúp quá, như các tài liệu MSDN chỉ các thành phần riêng lẻ nhưng không làm thế nào họ làm việc cùng nhau.
Bạn có thể biến bạn thành minidump quá nhỏ. Tinker với đối số DumpType. Đảm bảo rằng danh sách Mô-đun Debug + Windows + hiển thị đường dẫn DLL, phiên bản và dấu thời gian chính xác. –
Không, đó không phải là một vấn đề, tôi có thể tải minidumps trong WinDbg tốt và nó tải PDBs một cách chính xác. Nó chỉ là tôi muốn tự động hóa việc thu hồi stack thay vì kiểm tra các bãi bằng tay trong WinDbg. – Zarat
Nếu bạn muốn đi đường hack, bạn có thể chỉ cần truyền lệnh xuống ntsd và chụp đầu ra –