X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fprofiler.c;h=d74a273d085bf0825656642a845a683722b5ea89;hb=1c385f99e1c5e5c76e03c49e838ac29739a2e9e2;hp=af9ac55ec7ce7a4c7ca46cb63544bb12818632d4;hpb=66e33aa2ee25b9de6ff80e41aa7036b9a8352479;p=mono.git diff --git a/mono/metadata/profiler.c b/mono/metadata/profiler.c index af9ac55ec7c..d74a273d085 100644 --- a/mono/metadata/profiler.c +++ b/mono/metadata/profiler.c @@ -8,6 +8,7 @@ * Copyright 2001-2003 Ximian, Inc (http://www.ximian.com) * Copyright 2004-2009 Novell, Inc (http://www.novell.com) * Copyright 2011 Xamarin Inc (http://www.xamarin.com). + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #include "config.h" @@ -23,6 +24,7 @@ #include "mono/metadata/mono-config-dirs.h" #include "mono/io-layer/io-layer.h" #include "mono/utils/mono-dl.h" +#include #include #ifdef HAVE_UNISTD_H #include @@ -1063,6 +1065,7 @@ mono_profiler_coverage_free (MonoMethod *method) void mono_profiler_coverage_get (MonoProfiler *prof, MonoMethod *method, MonoProfileCoverageFunc func) { + MonoError error; MonoProfileCoverageInfo* info = NULL; int i, offset; guint32 code_size; @@ -1079,7 +1082,8 @@ mono_profiler_coverage_get (MonoProfiler *prof, MonoMethod *method, MonoProfileC if (!info) return; - header = mono_method_get_header (method); + header = mono_method_get_header_checked (method, &error); + mono_error_assert_ok (&error); start = mono_method_header_get_code (header, &code_size, NULL); debug_minfo = mono_debug_lookup_method (method); @@ -1165,10 +1169,13 @@ load_profiler_from_directory (const char *directory, const char *libname, const char *err; void *iter; + mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Attempting to load profiler %s from %s (desc %s)", libname, directory, desc); + iter = NULL; err = NULL; while ((path = mono_dl_build_path (directory, libname, &iter))) { pmodule = mono_dl_open (path, MONO_DL_LAZY, &err); + mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Attempting to load profiler: %s %ssuccessful, err: %s", path, pmodule?"":"not ", err); g_free (path); g_free (err); if (pmodule) @@ -1247,7 +1254,10 @@ mono_profiler_load (const char *desc) } if (!load_embedded_profiler (desc, mname)) { libname = g_strdup_printf ("mono-profiler-%s", mname); - if (mono_config_get_assemblies_dir ()) + char *profiler_lib_dir = getenv ("MONO_PROFILER_LIB_DIR"); + if (profiler_lib_dir) + res = load_profiler_from_directory (profiler_lib_dir, libname, desc); + if (!res && mono_config_get_assemblies_dir ()) res = load_profiler_from_directory (mono_assembly_getrootdir (), libname, desc); if (!res) res = load_profiler_from_directory (NULL, libname, desc);