in src/processor/minidump.cc [2511:2654]
void MinidumpModule::Print() {
if (!valid_) {
BPLOG(ERROR) << "MinidumpModule cannot print invalid data";
return;
}
printf("MDRawModule\n");
printf(" base_of_image = 0x%" PRIx64 "\n",
module_.base_of_image);
printf(" size_of_image = 0x%x\n",
module_.size_of_image);
printf(" checksum = 0x%x\n",
module_.checksum);
printf(" time_date_stamp = 0x%x %s\n",
module_.time_date_stamp,
TimeTToUTCString(module_.time_date_stamp).c_str());
printf(" module_name_rva = 0x%x\n",
module_.module_name_rva);
printf(" version_info.signature = 0x%x\n",
module_.version_info.signature);
printf(" version_info.struct_version = 0x%x\n",
module_.version_info.struct_version);
printf(" version_info.file_version = 0x%x:0x%x\n",
module_.version_info.file_version_hi,
module_.version_info.file_version_lo);
printf(" version_info.product_version = 0x%x:0x%x\n",
module_.version_info.product_version_hi,
module_.version_info.product_version_lo);
printf(" version_info.file_flags_mask = 0x%x\n",
module_.version_info.file_flags_mask);
printf(" version_info.file_flags = 0x%x\n",
module_.version_info.file_flags);
printf(" version_info.file_os = 0x%x\n",
module_.version_info.file_os);
printf(" version_info.file_type = 0x%x\n",
module_.version_info.file_type);
printf(" version_info.file_subtype = 0x%x\n",
module_.version_info.file_subtype);
printf(" version_info.file_date = 0x%x:0x%x\n",
module_.version_info.file_date_hi,
module_.version_info.file_date_lo);
printf(" cv_record.data_size = %d\n",
module_.cv_record.data_size);
printf(" cv_record.rva = 0x%x\n",
module_.cv_record.rva);
printf(" misc_record.data_size = %d\n",
module_.misc_record.data_size);
printf(" misc_record.rva = 0x%x\n",
module_.misc_record.rva);
printf(" (code_file) = \"%s\"\n", code_file().c_str());
printf(" (code_identifier) = \"%s\"\n",
code_identifier().c_str());
uint32_t cv_record_size;
const uint8_t *cv_record = GetCVRecord(&cv_record_size);
if (cv_record) {
if (cv_record_signature_ == MD_CVINFOPDB70_SIGNATURE) {
const MDCVInfoPDB70* cv_record_70 =
reinterpret_cast<const MDCVInfoPDB70*>(cv_record);
assert(cv_record_70->cv_signature == MD_CVINFOPDB70_SIGNATURE);
printf(" (cv_record).cv_signature = 0x%x\n",
cv_record_70->cv_signature);
printf(" (cv_record).signature = %s\n",
MDGUIDToString(cv_record_70->signature).c_str());
printf(" (cv_record).age = %d\n",
cv_record_70->age);
printf(" (cv_record).pdb_file_name = \"%s\"\n",
cv_record_70->pdb_file_name);
} else if (cv_record_signature_ == MD_CVINFOPDB20_SIGNATURE) {
const MDCVInfoPDB20* cv_record_20 =
reinterpret_cast<const MDCVInfoPDB20*>(cv_record);
assert(cv_record_20->cv_header.signature == MD_CVINFOPDB20_SIGNATURE);
printf(" (cv_record).cv_header.signature = 0x%x\n",
cv_record_20->cv_header.signature);
printf(" (cv_record).cv_header.offset = 0x%x\n",
cv_record_20->cv_header.offset);
printf(" (cv_record).signature = 0x%x %s\n",
cv_record_20->signature,
TimeTToUTCString(cv_record_20->signature).c_str());
printf(" (cv_record).age = %d\n",
cv_record_20->age);
printf(" (cv_record).pdb_file_name = \"%s\"\n",
cv_record_20->pdb_file_name);
} else if (cv_record_signature_ == MD_CVINFOELF_SIGNATURE) {
const MDCVInfoELF* cv_record_elf =
reinterpret_cast<const MDCVInfoELF*>(cv_record);
assert(cv_record_elf->cv_signature == MD_CVINFOELF_SIGNATURE);
printf(" (cv_record).cv_signature = 0x%x\n",
cv_record_elf->cv_signature);
printf(" (cv_record).build_id = ");
for (unsigned int build_id_index = 0;
build_id_index < (cv_record_size - MDCVInfoELF_minsize);
++build_id_index) {
printf("%02x", cv_record_elf->build_id[build_id_index]);
}
printf("\n");
} else {
printf(" (cv_record) = ");
for (unsigned int cv_byte_index = 0;
cv_byte_index < cv_record_size;
++cv_byte_index) {
printf("%02x", cv_record[cv_byte_index]);
}
printf("\n");
}
} else {
printf(" (cv_record) = (null)\n");
}
const MDImageDebugMisc* misc_record = GetMiscRecord(NULL);
if (misc_record) {
printf(" (misc_record).data_type = 0x%x\n",
misc_record->data_type);
printf(" (misc_record).length = 0x%x\n",
misc_record->length);
printf(" (misc_record).unicode = %d\n",
misc_record->unicode);
if (misc_record->unicode) {
string misc_record_data_utf8;
ConvertUTF16BufferToUTF8String(
reinterpret_cast<const uint16_t*>(misc_record->data),
misc_record->length - offsetof(MDImageDebugMisc, data),
&misc_record_data_utf8,
false); // already swapped
printf(" (misc_record).data = \"%s\"\n",
misc_record_data_utf8.c_str());
} else {
printf(" (misc_record).data = \"%s\"\n",
misc_record->data);
}
} else {
printf(" (misc_record) = (null)\n");
}
printf(" (debug_file) = \"%s\"\n", debug_file().c_str());
printf(" (debug_identifier) = \"%s\"\n",
debug_identifier().c_str());
printf(" (version) = \"%s\"\n", version().c_str());
printf("\n");
}