debug_resolve_symbol now tries to return information even if one step fails; output params are zeroed.
wposix: getcwd is now a function that calls _getcwd, to cooperate with mmgr's #define hook This was SVN commit r1877.
This commit is contained in:
parent
3760b15b51
commit
a17998b91a
@ -264,7 +264,7 @@ static int walk_stack(int (*cb)(STACKFRAME64*, void*), void* ctx, CONTEXT* threa
|
||||
// ~500µs
|
||||
int debug_resolve_symbol(void* ptr_of_interest, char* sym_name, char* file, int* line)
|
||||
{
|
||||
int ret = -1;
|
||||
int successes = 0;
|
||||
|
||||
lock();
|
||||
|
||||
@ -272,28 +272,33 @@ int debug_resolve_symbol(void* ptr_of_interest, char* sym_name, char* file, int*
|
||||
const DWORD64 addr = (DWORD64)ptr_of_interest;
|
||||
|
||||
// get symbol name
|
||||
sym_name[0] = '\0';
|
||||
SYMBOL_INFO_PACKAGE sp;
|
||||
SYMBOL_INFO* sym = &sp.si;
|
||||
sym->SizeOfStruct = sizeof(sp.si);
|
||||
sym->MaxNameLen = MAX_SYM_NAME;
|
||||
if(!SymFromAddr(hProcess, addr, 0, sym))
|
||||
goto fail;
|
||||
sprintf(sym_name, "%s", sym->Name);
|
||||
|
||||
// get source file + line number
|
||||
IMAGEHLP_LINE64 line_info = { sizeof(IMAGEHLP_LINE64) };
|
||||
DWORD displacement; // unused but required by SymGetLineFromAddr64!
|
||||
if(!SymGetLineFromAddr64(hProcess, addr, &displacement, &line_info))
|
||||
goto fail;
|
||||
sprintf(file, "%s", line_info.FileName);
|
||||
*line = line_info.LineNumber;
|
||||
|
||||
ret = 0;
|
||||
if(SymFromAddr(hProcess, addr, 0, sym))
|
||||
{
|
||||
sprintf(sym_name, "%s", sym->Name);
|
||||
successes++;
|
||||
}
|
||||
|
||||
// get source file + line number
|
||||
file[0] = '\0';
|
||||
*line = 0;
|
||||
IMAGEHLP_LINE64 line_info = { sizeof(IMAGEHLP_LINE64) };
|
||||
DWORD displacement; // unused but required by SymGetLineFromAddr64!
|
||||
if(SymGetLineFromAddr64(hProcess, addr, &displacement, &line_info))
|
||||
{
|
||||
sprintf(file, "%s", line_info.FileName);
|
||||
*line = line_info.LineNumber;
|
||||
successes++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fail:
|
||||
unlock();
|
||||
return ret;
|
||||
return (successes == 0)? -1 : 0;
|
||||
}
|
||||
|
||||
|
||||
@ -1298,7 +1303,7 @@ static long CALLBACK except_filter(EXCEPTION_POINTERS* except)
|
||||
|
||||
static void set_exception_handler()
|
||||
{
|
||||
prev_except_filter = SetUnhandledExceptionFilter(exception_filter);
|
||||
prev_except_filter = SetUnhandledExceptionFilter(except_filter);
|
||||
}
|
||||
|
||||
#else
|
||||
|
@ -222,6 +222,12 @@ int stat(const char* fn, struct stat* s)
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#undef getcwd
|
||||
|
||||
char* getcwd(char* buf, size_t buf_size)
|
||||
{
|
||||
return _getcwd(buf, buf_size);
|
||||
}
|
||||
|
||||
char* realpath(const char* fn, char* path)
|
||||
{
|
||||
|
@ -252,8 +252,7 @@ extern int close(int);
|
||||
_CRTIMP int access(const char*, int);
|
||||
|
||||
extern int chdir(const char*);
|
||||
#define getcwd _getcwd
|
||||
_CRTIMP char* getcwd(char*, size_t);
|
||||
extern char* getcwd(char*, size_t);
|
||||
|
||||
// user tests if available via #ifdef; can't use enum.
|
||||
#define _SC_PAGESIZE 1
|
||||
|
Loading…
Reference in New Issue
Block a user