158
168
MINIDUMP_MODULE_CALLBACK module = callback_input->Module;
160
170
char *buf = convert_wbcs_to_utf8(module.FullPath);
161
fprintf(log_file, "0x%08x", module.BaseOfImage);
171
fprintf(log_file, FORMAT_PTR, module.BaseOfImage);
162
172
fprintf(log_file, " %s", buf);
260
sprintf(buf, "%x", *(unsigned char *)address);
270
sprintf(buf, "0x%02x", (int)*(unsigned char *)address);
263
sprintf(buf, "%x", *(unsigned short *)address);
273
sprintf(buf, "0x%04x", (int)*(unsigned short *)address);
266
276
switch(basic_type)
268
278
case 2: /* btChar */
270
280
if (!IsBadStringPtr(*(PSTR*)address, 32))
271
sprintf(buf, "\"%.31s\"", *(unsigned long *)address);
281
sprintf(buf, "\"%.31s\"", *(const char **)address);
273
sprintf(buf, "%x", *(unsigned long *)address);
283
sprintf(buf, FORMAT_PTR, *(DWORD_PTR *)address);
275
285
case 6: /* btInt */
276
286
sprintf(buf, "%d", *(int *)address);
279
289
sprintf(buf, "%f", *(float *)address);
282
sprintf(buf, "%x", *(unsigned long *)address);
292
sprintf(buf, FORMAT_PTR, *(DWORD_PTR *)address);
287
297
if (basic_type == 8) /* btFloat */
288
298
sprintf(buf, "%lf", *(double *)address);
290
sprintf(buf, "%I64X", *(unsigned __int64 *)address);
300
sprintf(buf, "0x%016I64X", *(unsigned __int64 *)address);
303
sprintf(buf, "[unhandled type 0x%08x of length " FORMAT_PTR "]",
325
339
LocalFree(type_name_wbcs);
328
sprintf(value_str, "(%s) 0x%08x",
329
type_name, (DWORD *)value_addr);
342
sprintf(value_str, "(%s) " FORMAT_PTR,
343
type_name, (DWORD_PTR *)value_addr);
330
344
else if (ptr == 1)
331
sprintf(value_str, "(%s *) 0x%08x",
332
type_name, *(DWORD *)value_addr);
345
sprintf(value_str, "(%s *) " FORMAT_PTR,
346
type_name, *(DWORD_PTR *)value_addr);
334
sprintf(value_str, "(%s **) 0x%08x",
335
type_name, (DWORD *)value_addr);
348
sprintf(value_str, "(%s **) " FORMAT_PTR,
349
type_name, *(DWORD_PTR *)value_addr);
354
sprintf(value_str, "[no symbol tag]");
341
357
case 16: /* SymTagBaseType */
347
363
/* print a char * as a string */
348
364
if (ptr == 1 && length == 1)
350
sprintf(value_str, "0x%08x \"%s\"",
351
*(DWORD *)value_addr, (char *)*(DWORD*)value_addr);
366
sprintf(value_str, FORMAT_PTR " \"%s\"",
367
*(DWORD_PTR *)value_addr, *(const char **)value_addr);
356
sprintf(value_str, "0x%08x", *(DWORD *)value_addr);
371
sprintf(value_str, FORMAT_PTR, *(DWORD_PTR *)value_addr);
359
if (SymGetTypeInfo_(proc, mod_base, type, TI_GET_BASETYPE, &bt))
373
else if (SymGetTypeInfo_(proc, mod_base, type, TI_GET_BASETYPE, &bt))
361
375
format_basic_type(value_str, bt, length, value_addr);
366
379
case 12: /* SymTagEnum */
367
sprintf(value_str, "%d", *(DWORD *)value_addr);
380
sprintf(value_str, "%d", *(DWORD_PTR *)value_addr);
369
382
case 13: /* SymTagFunctionType */
370
sprintf(value_str, "0x%08x", *(DWORD *)value_addr);
383
sprintf(value_str, FORMAT_PTR, *(DWORD_PTR *)value_addr);
386
sprintf(value_str, "[unhandled tag: %d]", tag);
413
428
format_value(value_str, sym_info->ModBase, sym_info->TypeIndex,
414
429
(void *)var_data);
415
fprintf(log_file, "%s=%s", sym_info->Name, value_str);
430
fprintf(log_file, "%.*s=%s", (int)sym_info->NameLen, sym_info->Name,
417
if (log_params == FALSE && sym_info->Flags & SYMFLAG_LOCAL)
433
if (!log_params && sym_info->Flags & SYMFLAG_LOCAL)
419
435
format_value(value_str, sym_info->ModBase, sym_info->TypeIndex,
420
436
(void *)var_data);
421
fprintf(log_file, " %s = %s\n", sym_info->Name, value_str);
437
fprintf(log_file, " %.*s = %s\n", (int)sym_info->NameLen,
438
sym_info->Name, value_str);
451
468
if (SymFromAddr_(proc, stack_frame.AddrPC.Offset, &func_disp, pIHS))
453
470
fprintf(log_file,
454
"#%d 0x%08I64x in %.200s(",
455
nr_of_frame, stack_frame.AddrPC.Offset, pIHS->Name);
471
"#%d 0x%08I64x in %.*s(",
472
nr_of_frame, stack_frame.AddrPC.Offset,
473
pIHS->NameLen > 200 ? 200 : (int)pIHS->NameLen,
457
476
/* restrict symbol enumeration to this frame only */
458
477
ih_stack_frame.InstructionOffset = stack_frame.AddrPC.Offset;
724
743
return EXCEPTION_CONTINUE_SEARCH;
726
745
/* ... or if we can't create the log files ... */
727
if (get_temp_filename(dmp_filename, LOGFILE_PREFIX, "dmp") == FALSE ||
728
get_temp_filename(log_filename, LOGFILE_PREFIX, "log") == FALSE)
746
if (!get_temp_filename(dmp_filename, LOGFILE_PREFIX, "dmp") ||
747
!get_temp_filename(log_filename, LOGFILE_PREFIX, "log"))
729
748
return EXCEPTION_CONTINUE_SEARCH;
731
750
/* If we can't load a recent version of the dbghelp.dll, pass on this
733
if (load_dbghelp_dll() == FALSE)
752
if (!load_dbghelp_dll())
734
753
return EXCEPTION_CONTINUE_SEARCH;
736
755
/* open log file */