summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2015-04-20 14:44:32 +0100
committerVittorio Giovara <vittorio.giovara@gmail.com>2015-04-20 19:20:57 +0100
commiteaa2d123f0a643664721593d248ece6bcd85f1e6 (patch)
treecb7919c22182b882d88421b8caa3808fd0e5567a
parentbd5ad8b23d0f7d469ca30d03deca879993eb0431 (diff)
log: Print a full backtrace along with error messages under Valgrind
Useful to understand where and in what execution state a certain message is generated. It is enabled only when optimizations are disabled, since function names are not printed otherwise. Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
-rwxr-xr-xconfigure7
-rw-r--r--libavutil/log.c11
-rw-r--r--libavutil/version.h2
3 files changed, 19 insertions, 1 deletions
diff --git a/configure b/configure
index 3493ea8bf0..e2d9642ebb 100755
--- a/configure
+++ b/configure
@@ -317,6 +317,8 @@ Developer options (useful when working on Libav itself):
(group) and PROB the probability associated with
NAME (default 0.5).
--random-seed=VALUE seed value for --enable/disable-random
+ --disable-valgrind-backtrace do not print a backtrace under Valgrind
+ (only applies to --disable-optimizations builds)
NOTE: Object files are built at the place where configure is launched.
EOF
@@ -1261,6 +1263,7 @@ CONFIG_LIST="
pod2man
texi2html
thumb
+ valgrind_backtrace
xmm_clobber_test
"
@@ -1412,6 +1415,7 @@ HEADERS_LIST="
sys_un_h
sys_videoio_h
unistd_h
+ valgrind_valgrind_h
windows_h
winsock2_h
"
@@ -1743,6 +1747,7 @@ simd_align_16_if_any="altivec neon sse"
log2_deps="!libc_msvcrt"
symver_if_any="symver_asm_label symver_gnu_asm"
+valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
# threading support
atomics_gcc_if="sync_val_compare_and_swap"
@@ -2282,6 +2287,7 @@ enable optimizations
enable safe_bitstream_reader
enable static
enable swscale_alpha
+enable valgrind_backtrace
# By default, enable only those hwaccels that have no external dependencies.
enable dxva2 vda vdpau
@@ -4164,6 +4170,7 @@ check_header sys/select.h
check_header sys/time.h
check_header sys/un.h
check_header unistd.h
+check_header valgrind/valgrind.h
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
check_header VideoDecodeAcceleration/VDADecoder.h
diff --git a/libavutil/log.c b/libavutil/log.c
index 7f2cb08597..37427efaf1 100644
--- a/libavutil/log.c
+++ b/libavutil/log.c
@@ -40,6 +40,12 @@
#include "internal.h"
#include "log.h"
+#if HAVE_VALGRIND_VALGRIND_H
+#include <valgrind/valgrind.h>
+/* this is the log level at which valgrind will output a full backtrace */
+#define BACKTRACE_LOGLEVEL AV_LOG_ERROR
+#endif
+
static int av_log_level = AV_LOG_INFO;
static int flags;
@@ -164,6 +170,11 @@ void av_log_default_callback(void *avcl, int level, const char *fmt, va_list vl)
}
colored_fputs(av_clip(level >> 3, 0, NB_LEVELS - 1), tint >> 8, line);
av_strlcpy(prev, line, sizeof line);
+
+#if CONFIG_VALGRIND_BACKTRACE
+ if (level <= BACKTRACE_LOGLEVEL)
+ VALGRIND_PRINTF_BACKTRACE("");
+#endif
}
static void (*av_log_callback)(void*, int, const char*, va_list) =
diff --git a/libavutil/version.h b/libavutil/version.h
index eb2574ae81..9c45e0eed9 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -55,7 +55,7 @@
#define LIBAVUTIL_VERSION_MAJOR 54
#define LIBAVUTIL_VERSION_MINOR 12
-#define LIBAVUTIL_VERSION_MICRO 0
+#define LIBAVUTIL_VERSION_MICRO 1
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
LIBAVUTIL_VERSION_MINOR, \