/* * mono_debug_lookup_locals: * * Return information about the local variables of MINFO. * The result should be freed using mono_debug_free_locals (). */ MonoDebugLocalsInfo* mono_debug_lookup_locals (MonoMethod *method) { MonoDebugMethodInfo *minfo; MonoDebugLocalsInfo *res; if (mono_debug_format == MONO_DEBUG_FORMAT_NONE) return NULL; mono_debugger_lock (); minfo = mono_debug_lookup_method_internal (method); if (!minfo || !minfo->handle) { mono_debugger_unlock (); return NULL; } if (minfo->handle->ppdb) { res = mono_ppdb_lookup_locals (minfo); } else { if (!minfo->handle->symfile || !mono_debug_symfile_is_loaded (minfo->handle->symfile)) res = NULL; else res = mono_debug_symfile_lookup_locals (minfo); } mono_debugger_unlock (); return res; }
/** * mono_debug_lookup_source_location: * @address: Native offset within the @method's machine code. * * Lookup the source code corresponding to the machine instruction located at * native offset @address within @method. * * The returned `MonoDebugSourceLocation' contains both file / line number * information and the corresponding IL offset. It must be freed by * mono_debug_free_source_location(). */ MonoDebugSourceLocation * mono_debug_lookup_source_location (MonoMethod *method, guint32 address, MonoDomain *domain) { MonoDebugMethodInfo *minfo; MonoDebugSourceLocation *location; gint32 offset; if (mono_debug_format == MONO_DEBUG_FORMAT_NONE) return NULL; mono_debugger_lock (); minfo = _mono_debug_lookup_method (method); if (!minfo || !minfo->handle || !minfo->handle->symfile || !mono_debug_symfile_is_loaded (minfo->handle->symfile)) { mono_debugger_unlock (); return NULL; } offset = il_offset_from_address (method, domain, address); if (offset < 0) { mono_debugger_unlock (); return NULL; } location = mono_debug_symfile_lookup_location (minfo, offset); mono_debugger_unlock (); return location; }
/** * mono_debug_lookup_source_location_by_il: * * Same as mono_debug_lookup_source_location but take an IL_OFFSET argument. */ MonoDebugSourceLocation * mono_debug_lookup_source_location_by_il (MonoMethod *method, guint32 il_offset, MonoDomain *domain) { MonoDebugMethodInfo *minfo; MonoDebugSourceLocation *location; if (mono_debug_format == MONO_DEBUG_FORMAT_NONE) return NULL; mono_debugger_lock (); minfo = mono_debug_lookup_method_internal (method); if (!minfo || !minfo->handle) { mono_debugger_unlock (); return NULL; } if (!minfo->handle->ppdb && (!minfo->handle->symfile || !mono_debug_symfile_is_loaded (minfo->handle->symfile))) { mono_debugger_unlock (); return NULL; } if (minfo->handle->ppdb) location = mono_ppdb_lookup_location (minfo, il_offset); else location = mono_debug_symfile_lookup_location (minfo, il_offset); mono_debugger_unlock (); return location; }
/* * mono_debug_lookup_locals: * * Return information about the local variables of MINFO. * The result should be freed using mono_debug_symfile_free_locals (). */ MonoDebugLocalsInfo* mono_debug_lookup_locals (MonoMethod *method) { MonoDebugMethodInfo *minfo; MonoDebugLocalsInfo *res; if (mono_debug_format == MONO_DEBUG_FORMAT_NONE) return NULL; mono_debugger_lock (); minfo = _mono_debug_lookup_method (method); if (!minfo || !minfo->handle || !minfo->handle->symfile || !mono_debug_symfile_is_loaded (minfo->handle->symfile)) { mono_debugger_unlock (); return NULL; } res = mono_debug_symfile_lookup_locals (minfo); mono_debugger_unlock (); return res; }