[vlc-devel] [PATCH] libvlc: dump object types abd names when leaking
Steve Lhomme
robux4 at ycbcr.xyz
Thu Feb 21 13:09:11 CET 2019
On 21/02/2019 13:02, Rémi Denis-Courmont wrote:
> Some people also refuse to support building with the Java compiler.
> VLC is a C/C++11 copyleft project. You can't build it with a C89, or
> Microsoft C dialect,
It's technically possible. We did it for UWP releases. I maintained a
patchset to make it possible. But it's too much work having to switch
branches between the one that works with MSVC and master.
> or Java compiler, and you can't redistribute it if you have
> proprietary non-OS dependencies.
>
> I don't know who some people are, but I am not aware of anybody
> preventing build with another C11/C++11 toolchain than GCC or Clang.
>
> Le 21 février 2019 13:55:48 GMT+02:00, Steve Lhomme <robux4 at ycbcr.xyz>
> a écrit :
>
> On 21/02/2019 12:49, Rémi Denis-Courmont wrote:
>
> So... You say that your debugging environment sucks. That is
> an argument for you to fix your debugging environment, or use
> another environment.
>
>
> No because some people are refusing to support building with MSVC.
> Things will hopefully change when we can generate usable PDB files with
> CLang.
>
> In the mean time I am forced to use gcc and gdb.
>
> >
>
> That is not an argument for adding printf debugging to one
> specific assertion out of many, which does not solve your
> problem.
>
>
> Are you saying this patch doesn't help debug leaks ?
>
> >
>
> Le 21 février 2019 13:32:04 GMT+02:00, Steve Lhomme
> <robux4 at ycbcr.xyz> a écrit : On 21/02/2019 11:58, Rémi
> Denis-Courmont wrote: It's making a special snow flake of that
> one specific assertion. If you want to develop tooling for
> dumping the object tree, you're much better off scripting your
> favorite debugger than cluttering one specific VLC assertion.
> I don't think that's possible in QtCreator (and that's not my
> favorite debugger by far), while writing a few lines of code
> in C is very easy. On Windows gdb doesn't break on asserts. It
> could be enabled to do it, but then everytime I'd run VLC
> under gdb it breaks 20 times in weird Qt places. So I always
> end up disabling it. So when a leak occurs (or any assert for
> that matter) I have to go through this and pray I'll have the
> leak/assert again. Le 21 février 2019 12:44:44 GMT+02:00,
> Steve Lhomme <robux4 at ycbcr.xyz> a écrit : On 21/02/2019 11:37,
> Rémi Denis-Courmont wrote: Hi, My GDB skills are bad so I just
> walked the objects tree by printing memory content on the
> abort. It would be much easier with VLC-specific GDB macros,
> but the point is that you can debug that assertion just as
> any. It also works after the fact for pseudorandom failures,
> if you enable core dumps. Much better than this patch since
> you have access to all memory, not just the objects tree.
> Adding special snow flake debug code for assertion is a bad
> idea that sets a very bad precedent - as opposed to improving
> integration with proper debugging tools. What's snow flake
> about adding debug tooling ? Le 21 février 2019 12:26:47
> GMT+02:00, Thomas Guillem <thomas at gllm.fr> a écrit : On Thu,
> Feb 21, 2019, at 11:18, Rémi Denis-Courmont wrote: Hi, Well I
> did debug that assertion failure using (ASan +) gdb just fine
> last time. The code has not changed. So this kludge is
> definitely not necessary for its alleged purpose. Even if it
> works with gdb (please tell us how), evelopers don't always
> run VLC with gdb. This cause an issue if the leak is not
> reproducible... Not only that but stderr is not universally
> the output for debug nor is it universally where assertion
> failures are dumped to, So if there is no stderr, you don't
> see the error. I don't see the problem at all. so this patch
> does not even work properly Works on Windows, Android, Linux,
> macOS when VLC is run via command line. This is the case for
> most developers usecase. And in most cases you can see the
> leak by stopping all inputs and dumping the objects tree
> before quitting, anyway. What about leaks not related to
> playback ? Interface, service discovery, playlist that are
> only cleaned when vlc is closed. Le 21 février 2019 11:24:57
> GMT+02:00, Thomas Guillem <thomas at gllm.fr> a écrit : Comment:
> A lot of developers asked me to propose this patch again. It
> was previously refused because developers could use proper
> debugging tools. I disagree with that assumption. Even with
> Asan, when the leak assert fail, it will abort() without
> prompting any leaks, so you'll have to edit libvlc.c to remove
> this assert. If your leak was not reproducible, you'll lose a
> precious information. And good luck finding the leak with GDB,
> you really need to know the internal of vlc_object_t to
> iterate through the different list to get the culprit. Commit
> log: In case of a vlc_object_t leak, and if asserts are
> enabled, the error output will be like the following (when
> leaking intentionally decoder_t objects): === vlc_object LEAKS
> detected === \ playlist | \ input | | \ decoder avcodec | | |
> decoder faad | | | decoder stl
> ------------------------------------------------------------------------
> src/libvlc.c | 30 ++++++++++++++++++++++++++++++ 1 file
> changed, 30 insertions(+) diff --git a/src/libvlc.c
> b/src/libvlc.c index 8e8d2ca8b2..d9ff96de84 100644 ---
> a/src/libvlc.c +++ b/src/libvlc.c @@ -436,6 +436,24 @@ void
> libvlc_InternalCleanup( libvlc_int_t *p_libvlc ) #endif }
> +#ifndef NDEBUG +static void
> DumpObjectLeaks(vlc_object_internals_t *priv, unsigned level)
> +{ + bool first = true; + vlc_list_foreach(priv,
> &priv->children, siblings) + { + vlc_object_t *obj =
> vlc_externals(priv); + for (unsigned i = 0; i < level; i++) +
> fprintf(stderr, " %s ", first && i == level -1 ? "\\" : "|");
> + char *name = vlc_object_get_name(obj); + fprintf(stderr, "%s
> %s\n", vlc_object_typename(obj), name ? name : ""); +
> free(name); + DumpObjectLeaks(priv, level + 1); + first =
> false; + } +} +#endif + /** * Destroy everything. * This
> function requests the running threads to finish, waits for
> their @@ -449,6 +467,18 @@ void libvlc_InternalDestroy(
> libvlc_int_t *p_libvlc ) vlc_ExitDestroy( &priv->exit );
> +#ifndef NDEBUG + { + vlc_object_internals_t *internal =
> vlc_internals(p_libvlc); + if (atomic_load(&internal->refs) !=
> 1) + { + vlc_mutex_lock(&internal->tree_lock); +
> fprintf(stderr, "=== vlc_object LEAKS detected ===\n"); +
> DumpObjectLeaks(internal, 1); +
> vlc_mutex_unlock(&internal->tree_lock); + } + } +#endif
> assert( atomic_load(&(vlc_internals(p_libvlc)->refs)) == 1 );
> vlc_object_release( p_libvlc ); } -- Envoyé de mon appareil
> Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
> ------------------------------------------------------------------------
> vlc-devel mailing list To unsubscribe or modify your
> subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel -- Envoyé de
> mon appareil Android avec Courriel K-9 Mail. Veuillez excuser
> ma brièveté.
> ------------------------------------------------------------------------
> vlc-devel mailing list To unsubscribe or modify your
> subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
> ------------------------------------------------------------------------
> vlc-devel mailing list To unsubscribe or modify your
> subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel -- Envoyé de
> mon appareil Android avec Courriel K-9 Mail. Veuillez excuser
> ma brièveté.
> ------------------------------------------------------------------------
> vlc-devel mailing list To unsubscribe or modify your
> subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
> ------------------------------------------------------------------------
> vlc-devel mailing list To unsubscribe or modify your
> subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel -- Envoyé de
> mon appareil Android avec Courriel K-9 Mail. Veuillez excuser
> ma brièveté.
> ------------------------------------------------------------------------
> vlc-devel mailing list To unsubscribe or modify your
> subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
> ------------------------------------------------------------------------
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
>
> --
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez
> excuser ma brièveté.
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list