barbieri pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=678e8dfdc377e304bbe8e0617de1442a04a8c873

commit 678e8dfdc377e304bbe8e0617de1442a04a8c873
Author: Gustavo Sverzut Barbieri <barbi...@profusion.mobi>
Date:   Tue Dec 6 14:06:54 2016 -0200

    eo_debug: add lifecycle debug options, allow run-in-tree and use eina_btlog.
    
    As usual with our code, EFL_RUN_IN_TREE=1 will lead to usage of
    binaries from the current build dir instead of system.
    
    To make user life easier, add -l/--lifecycle-debug and
    -L/--lifecycle-no-debug options, as well as -h/--help. The
    lifecycle-debug option will export the correct environment variables,
    such as EO_LIFECYCLE_DEBUG, EO_LIFECYCLE_NO_DEBUG and
    EINA_LOG_LEVELS=eo_lifecycle:4 if no such level was set for that
    domain.
    
    Last but not least, pass all command's stderr thru eina_btlog so
    backtraces are automatically translated to function names, files and
    lines. This one was a bit trickier to respect colors and stdout/stderr
    contents, see comments in the script.
---
 src/scripts/eo/eo_debug.in | 93 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 91 insertions(+), 2 deletions(-)

diff --git a/src/scripts/eo/eo_debug.in b/src/scripts/eo/eo_debug.in
index a289efa..587bcad 100644
--- a/src/scripts/eo/eo_debug.in
+++ b/src/scripts/eo/eo_debug.in
@@ -1,9 +1,98 @@
 #!/bin/sh
 prefix="@prefix@"
 exec_prefix="@exec_prefix@"
+
+check_args=1
+while [ $# -ge 1 -a $check_args -eq 1 ]; do
+    case "$1" in
+        -l*|--lifecycle-debug*)
+            ARG="$1"
+            shift
+            CLASSES=`echo "$ARG" | cut -d= -f2`
+            if [ "$CLASSES" = "$ARG" -o -z "$CLASSES" ]; then
+                CLASSES=1
+            fi
+            export EO_LIFECYCLE_DEBUG=$CLASSES
+            ;;
+
+        -L*|--lifecycle-no-debug*)
+            ARG="$1"
+            shift
+            CLASSES=`echo "$ARG" | cut -d= -f2`
+            if [ "$CLASSES" = "$ARG" -o -z "$CLASSES" ]; then
+                echo "ERROR: missing option parameter (Classes to avoid 
lifecycle debug)" >&2
+                exit 1
+            fi
+            export EO_LIFECYCLE_NO_DEBUG=$CLASSES
+            ;;
+
+        -h|--help)
+            echo "Usage:"
+            echo
+            echo "    $0 [options] <executable> [executable parameters]"
+            echo
+            echo "Options:"
+            echo "    -l, --lifecycle-debug[=class1,class2]   Turn on debug 
for object "
+            echo "                                            lifecycle, 
optionally provides "
+            echo "                                            a whitelist of 
classes to be allowed."
+            echo "    -L, --lifecycle-no-debug=class1,class2  Disable 
lifecycle for the"
+            echo "                                            selected 
classes."
+            echo "    -h, --help                              This message."
+            exit 0
+            ;;
+
+        *)
+            check_args=0
+            break
+    esac
+done
+
 if [ $# -lt 1 ]
 then
-   echo "Usage: $0 <executable> [executable parameters]"
+    echo "Usage: $0 [options] <executable> [executable parameters]" >&2
+    exit 1
+fi
+
+if [ -z "${EFL_RUN_IN_TREE}" ]; then
+    export LD_PRELOAD="@libdir@/libeo_dbg.so"
+    btlog_bin=eina_btlog
+else
+    bd=$PWD
+    while [ ! -d "${bd}/src/lib/eo/.libs" ]; do
+        bd=`dirname "$bd"`
+        if [ $bd = / ]; then
+            echo "ERROR: EFL_RUN_IN_TREE must be used from inside EFL build 
tree" >&2
+            exit 1
+        fi
+    done
+    export LD_PRELOAD="$bd/src/lib/eo/.libs/libeo_dbg.so"
+    btlog_bin="$bd/src/bin/eina/eina_btlog"
+fi
+
+if [ "${EINA_LOG_COLOR_DISABLE}" = 1 ]; then
+    btlog_opts="-n"
+elif [ ! -t 1 ]; then
+    btlog_opts="-n"
 else
-   LD_PRELOAD="@libdir@/libeo_dbg.so" "$@"
+    btlog_opts=""
+    # force color otherwise it will be disabled
+    # since we're using a pipe to eina_btlog
+    export EINA_LOG_COLOR_DISABLE=0
+fi
+
+if [ ! -z "$EO_LIFECYCLE_DEBUG" ]; then
+    if ! echo "$EINA_LOG_LEVELS" | grep "eo_lifecycle:" >/dev/null 
2>/dev/null; then
+        export EINA_LOG_LEVELS="eo_lifecycle:4,$EINA_LOG_LEVELS"
+    fi
 fi
+
+# 3>&1 1>&2 2>&3: swaps stdout and stderr
+#
+# we need it since eina_btlog reads from stdin and that's the result
+# of command's stdout.
+#
+# at the end we need it again, since eina_btlog outputs to stdout, and
+# that is supposed to be stderr... while stderr was actually the
+# original command's ($@) stdout!
+
+("$@" 3>&1 1>&2 2>&3 | ${btlog_bin} ${btlog_opts} -c) 3>&1 1>&2 2>&3

-- 


Reply via email to