Khi so sánh các định nghĩa lắp ráp giữa các bản dựng VS2012 và các bản dựng XBuild, tôi nhận thấy rằng XBuild không tạo ra DebuggableAttribute. Nếu thuộc tính này bị thiếu, gỡ lỗi với Visual Studio 2012 là không thể, ngay cả khi bạn tải các biểu tượng theo cách thủ công. bước sau đây là cần thiết để lắp ráp debug được biên soạn với Mono/XBuild với VS2012:
- Sử dụng XBuild để biên dịch các giải pháp
- Sử dụng Mono.Cecil cho mỗi assembly bạn muốn gỡ lỗi để tạo ra các tập tin pdb và để tiêm DebuggableAttribute (xem mã bên dưới)
- Bắt đầu của bạn với XBuild biên soạn chương trình
- Sử dụng "debug/Đính kèm để xử lý ..." từ VS2012 để gỡ lỗi chương trình chạy
mã cho generatin g pdb và injecting DebuggableAttribute:
string assemblyPath = @"HelloWorld.exe";
var assemblyDefinition = AssemblyDefinition.ReadAssembly(assemblyPath,
new ReaderParameters() { SymbolReaderProvider = new MdbReaderProvider(), ReadSymbols = true});
CustomAttribute debuggableAttribute = newCustomAttribute(
assemblyDefinition.MainModule.Import(
typeof(DebuggableAttribute).GetConstructor(new[] { typeof(bool), typeof(bool) })));
debuggableAttribute.ConstructorArguments.Add(new CustomAttributeArgument(
assemblyDefinition.MainModule.Import(typeof(bool)), true));
debuggableAttribute.ConstructorArguments.Add(new CustomAttributeArgument(
assemblyDefinition.MainModule.Import(typeof(bool)), true));
assemblyDefinition.CustomAttributes.Add(debuggableAttribute);
assemblyDefinition.Write(assemblyPath,
new WriterParameters() { SymbolWriterProvider = new PdbWriterProvider(), WriteSymbols = true});
Tôi không tin điều này là có thể (nhưng tôi rất muốn được chứng minh là sai). –
Khi tôi tạo định dạng tệp '.mdb' của Mono nhiều năm trước, PDB không có giấy tờ và độc quyền, vì vậy chúng tôi không thể chỉ đơn giản sử dụng nó. Và AFAIK, điều này vẫn đúng ngày hôm nay (ít nhất Wikipedia nói như vậy). Có thể có một số công cụ ngoài đó để viết các tệp này, nhưng chúng không thể tạo các PDB "đúng" trừ khi chúng được Microsoft viết hoặc xuất bản định dạng tệp. Tuy nhiên, tôi cũng muốn được chứng minh là sai về điều này. –
FYI nếu bạn đang làm điều ngược lại, sử dụng 'pdb2mdb some.dll' để chuyển đổi pdb sang định dạng mono – KCD