summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
4272e57)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5161
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
free(cmd);
#elif (defined(WIN32) && defined (_M_IX86))
int i;
free(cmd);
#elif (defined(WIN32) && defined (_M_IX86))
int i;
- /* to get the backtrace from the libc */
- char **backtrace = backtrace_symbols (e->bt, e->used);
+char **backtrace = backtrace_symbols (e->bt, e->used);
/* parse the output and build a new backtrace */
e->bt_strings = xbt_new(char*,e->used);
/* parse the output and build a new backtrace */
e->bt_strings = xbt_new(char*,e->used);
STACKFRAME* stack_frame;
int first = 1;
STACKFRAME* stack_frame;
int first = 1;
+ IMAGEHLP_SYMBOL * pSym;
+ unsigned long displacement = 0;
+ IMAGEHLP_LINE line_info = {0};
+ byte __buffer[(sizeof(SYMBOL_INFO) +MAX_SYM_NAME * sizeof(TCHAR) + sizeof(ULONG64) - 1) / sizeof(ULONG64)];
+
CONTEXT context = {CONTEXT_FULL};
GetThreadContext(GetCurrentThread(), &context);
CONTEXT context = {CONTEXT_FULL};
GetThreadContext(GetCurrentThread(), &context);
+ pSym = (IMAGEHLP_SYMBOL*)__buffer;
+
+ pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL);
+ pSym->MaxNameLength = MAX_SYM_NAME;
+
+
+ line_info.SizeOfStruct = sizeof(IMAGEHLP_LINE);
+
+
while(pos < size)
{
stack_frame = (void*)calloc(1,sizeof(STACKFRAME));
while(pos < size)
{
stack_frame = (void*)calloc(1,sizeof(STACKFRAME));
&& !first)
{
if(stack_frame->AddrReturn.Offset)
&& !first)
{
if(stack_frame->AddrReturn.Offset)
- buffer[pos++] = (void*)stack_frame;
+ {
+
+ if((*(dbg_hlp->sym_get_sym_from_addr))(dbg_hlp->process_handle,stack_frame->AddrPC.Offset, &displacement,pSym))
+ {
+ if((*(dbg_hlp->sym_get_line_from_addr))(dbg_hlp->process_handle,stack_frame->AddrPC.Offset, &displacement,&line_info))
+ buffer[pos++] = (void*)stack_frame;
+ }
+ }
- free(stack_frame); /* no symbol */
+ free(stack_frame); /* no symbol or no line info */
+ else
+ {
+ strings[pos] = strdup("<no line>");
+ }
+ }
+ else
+ {
+ strings[pos] = strdup("<no symbole>");