Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--main/Makefile.am4
-rw-r--r--main/build/MacOSX/monostub.m21
3 files changed, 29 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index cf2226ddd4..f0e1a62b38 100644
--- a/Makefile
+++ b/Makefile
@@ -122,6 +122,10 @@ run-gdb:
run-gdb-64:
cd main && $(MAKE) run-gdb-64
+
+run-leaks:
+ cd main && $(MAKE) run-leaks
+
test:
cd main && $(MAKE) test assembly=$(assembly)
diff --git a/main/Makefile.am b/main/Makefile.am
index 940789d60f..766272b14e 100644
--- a/main/Makefile.am
+++ b/main/Makefile.am
@@ -128,6 +128,10 @@ endif
run-bundle: $(PROGRAM)
LANG= LC_ALL= $(MD_LAUNCH_SETUP) $(MD_LAUNCH_EXTRA_ENV) $(MD_BIN_PATH)/MonoDevelop --no-redirect
+
+run-leaks: $(PROGRAM)
+ DYLD_FORCE_FLAT_NAMESPACE=1 DYLD_INSERT_LIBRARIES=`pwd`/build/bin/libgobject-tracker.dylib LANG= LC_ALL= $(MD_LAUNCH_SETUP) $(MD_LAUNCH_EXTRA_ENV) $(MD_BIN_PATH)/MonoDevelop --no-redirect
+
run-64: run-sgen-64
run-boehm: runmd
diff --git a/main/build/MacOSX/monostub.m b/main/build/MacOSX/monostub.m
index d6296755f0..826ebe9915 100644
--- a/main/build/MacOSX/monostub.m
+++ b/main/build/MacOSX/monostub.m
@@ -19,6 +19,7 @@
typedef int (* mono_main) (int argc, char **argv);
typedef void (* mono_free) (void *ptr);
typedef char * (* mono_get_runtime_build_info) (void);
+typedef void (* gobject_tracker_init) (void *libmono);
void *libmono;
@@ -231,6 +232,24 @@ correct_locale(void)
setenv("LANGUAGE", [preferredLanguage UTF8String], 1);
}
+static void
+try_load_gobject_tracker (void *libmono, char *entry_executable)
+{
+ void *gobject_tracker;
+ NSString *entryExecutable = [[NSString alloc] initWithUTF8String: entry_executable];
+ NSString *binDir = [entryExecutable stringByDeletingLastPathComponent];
+ NSString *libgobjectPath = [binDir stringByAppendingPathComponent: @"libgobject-tracker.dylib"];
+ gobject_tracker = dlopen ((char *)[libgobjectPath UTF8String], RTLD_GLOBAL);
+ if (gobject_tracker) {
+ gobject_tracker_init _gobject_tracker_init = (gobject_tracker_init) dlsym (gobject_tracker, "gobject_tracker_init");
+ if (_gobject_tracker_init) {
+ _gobject_tracker_init (libmono);
+ printf ("Loaded gobject tracker\n");
+ return;
+ }
+ }
+}
+
int main (int argc, char **argv)
{
//clock_t start = clock();
@@ -330,6 +349,8 @@ int main (int argc, char **argv)
exit_with_message ((char *)[msg UTF8String], argv[0]);
}
+ try_load_gobject_tracker (libmono, argv [0]);
+
mono_main _mono_main = (mono_main) dlsym (libmono, "mono_main");
if (!_mono_main) {
fprintf (stderr, "Could not load mono_main(): %s\n", dlerror ());