From b242f50626c57212d2b6525d8bddc8f0595971f4 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Thu, 22 Sep 2016 13:16:18 +0100 Subject: [PATCH] Eo: introducing libeo_dbg.so. This has been in the making for a very long time. Thanks to Marcel for reminding me to do it. What is it? This is a tool to help application developers debug their apps with everything Eo. Eo is strict, but not as strict as it can be. Many strict tests and debug are very expensive to implement, and we have so many hot-paths that even basic "ifs" to check if debugging is enabled will add significant overhead to normal running applications. This is why I created this library. All the expensive tests and bookkeeping should be wrapped around with "#ifdef EO_DEBUG". With this change, libeo.so is compiled twice, once normally, and once with this define set (as libeo_dbg.so). This means that normal eo code will not be affected, but if you decide to debug your application, all you need to do is: LD_PRELOAD=/path/to/libeo_dbg.so ./app Or use the convenient wrapper: eo_debug ./app Which will load the debug heavy version. What's currently there: at the moment, EO_DEBUG enables xref and data_xref and stricter tests when fetching object data. In the future, I also plan introducing "zombie objects", which essentially mean that objects are never really deleted, so you can query them long after they are gone to get more information on what they were. So if for example you have an object id that you want to query after the object has been deleted, you can. I also plan on having a way to disable/enable certain debug mode features via env vars, and maybe make the test suite link against this one instead of the normal one, and possibly add more internal hooks for the test suite to better inspect internal state? P.S: The amount of errors spewed out when running it on elementary_test makes me wish I wrote this earlier. :( @feature --- configure.ac | 1 + src/Makefile_Eo.am | 14 +++++++++++++- src/scripts/eo/eo_debug.in | 9 +++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/scripts/eo/eo_debug.in diff --git a/configure.ac b/configure.ac index d0b9962823..61d3c9d7f9 100644 --- a/configure.ac +++ b/configure.ac @@ -5760,6 +5760,7 @@ src/lib/eina/eina_config.h src/lib/ecore_x/ecore_x_version.h src/lib/efl/Efl_Config.h src/lib/elementary/Elementary.h +src/scripts/eo/eo_debug elm_intro.h spec/efl.spec pc/evil.pc diff --git a/src/Makefile_Eo.am b/src/Makefile_Eo.am index 80460ef791..eefa6119f8 100644 --- a/src/Makefile_Eo.am +++ b/src/Makefile_Eo.am @@ -14,7 +14,8 @@ BUILT_SOURCES += \ $(eo_eolian_c) \ $(eo_eolian_h) -lib_LTLIBRARIES += lib/eo/libeo.la +lib_LTLIBRARIES += lib/eo/libeo.la \ + lib/eo/libeo_dbg.la installed_eomainheadersdir = $(includedir)/eo-@VMAJ@ dist_installed_eomainheaders_DATA = lib/eo/Eo.h lib/eo/efl_future.h @@ -38,6 +39,17 @@ lib_eo_libeo_la_LIBADD = @EO_LIBS@ lib_eo_libeo_la_DEPENDENCIES = @EO_INTERNAL_LIBS@ lib_eo_libeo_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@ +### The Eo debug build +lib_eo_libeo_dbg_la_SOURCES = $(lib_eo_libeo_la_SOURCES) +lib_eo_libeo_dbg_la_CPPFLAGS = $(lib_eo_libeo_la_CPPFLAGS) -DEO_DEBUG +lib_eo_libeo_dbg_la_LIBADD = $(lib_eo_libeo_la_LIBADD) +lib_eo_libeo_dbg_la_DEPENDENCIES = $(lib_eo_libeo_la_DEPENDENCIES) +lib_eo_libeo_dbg_la_LDFLAGS = $(lib_eo_libeo_la_LDFLAGS) + +bin_SCRIPTS += scripts/eo/eo_debug + +###### + eoeolianfilesdir = $(datadir)/eolian/include/eo-@VMAJ@ eoeolianfiles_DATA = \ $(eo_eolian_files) \ diff --git a/src/scripts/eo/eo_debug.in b/src/scripts/eo/eo_debug.in new file mode 100644 index 0000000000..a289efa6ad --- /dev/null +++ b/src/scripts/eo/eo_debug.in @@ -0,0 +1,9 @@ +#!/bin/sh +prefix="@prefix@" +exec_prefix="@exec_prefix@" +if [ $# -lt 1 ] +then + echo "Usage: $0 [executable parameters]" +else + LD_PRELOAD="@libdir@/libeo_dbg.so" "$@" +fi