forked from premiere/premiere-libtorrent
added experimental assert with stacktrace for elf targets using gcc
This commit is contained in:
parent
e80653152b
commit
a443225d49
15
Jamfile
15
Jamfile
|
@ -23,7 +23,8 @@ rule linking ( properties * )
|
|||
local result ;
|
||||
|
||||
# openssl libraries, if enabled
|
||||
if <openssl>sha-1 in $(properties) || <openssl>pe in $(properties)
|
||||
if <openssl>sha-1 in $(properties)
|
||||
|| <openssl>pe in $(properties)
|
||||
{
|
||||
if <target-os>windows in $(properties)
|
||||
{
|
||||
|
@ -42,7 +43,8 @@ rule linking ( properties * )
|
|||
}
|
||||
|
||||
# socket functions on windows require winsock libraries
|
||||
if <target-os>windows in $(properties) || <target-os>cygwin in $(properties)
|
||||
if <target-os>windows in $(properties)
|
||||
|| <target-os>cygwin in $(properties)
|
||||
{
|
||||
result += <library>ws2_32
|
||||
<library>wsock32
|
||||
|
@ -68,6 +70,15 @@ rule linking ( properties * )
|
|||
;
|
||||
}
|
||||
|
||||
if <toolset>gcc in $(properties)
|
||||
&& <target-os>linux in $(properties)
|
||||
&& <variant>debug in $(properties)
|
||||
{
|
||||
# for backtraces in assertion failures
|
||||
# which only works on ELF targets with gcc
|
||||
result += <cxxflags>-rdynamic <source>src/assert.cpp ;
|
||||
}
|
||||
|
||||
if <boost>source in $(properties)
|
||||
{
|
||||
result += <library>/boost/thread//boost_thread
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
|
||||
Copyright (c) 2007, Arvid Norberg
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the author nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef TORRENT_ASSERT_HPP_INCLUDED
|
||||
#define TORRENT_ASSERT_HPP_INCLUDED
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if defined __linux__ && defined _GNUC
|
||||
#ifdef assert
|
||||
#undef assert
|
||||
#endif
|
||||
|
||||
void assert_fail(int line, char const* file);
|
||||
|
||||
#define assert(x) if (!(x)) assert_fail(__LINE__, __FILE__)
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
#ifndef assert
|
||||
#define assert(x) (void)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
@ -80,3 +80,4 @@ namespace libtorrent
|
|||
}
|
||||
|
||||
#endif // TORRENT_DEBUG_HPP_INCLUDED
|
||||
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
|
||||
Copyright (c) 2007, Arvid Norberg
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the author nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
#include <execinfo.h>
|
||||
|
||||
void assert_fail(int line, char const* file)
|
||||
{
|
||||
|
||||
fprintf(stderr, "assertion failed. Please file a bugreport at "
|
||||
"http://code.rasterbar.com/libtorrent/newticket\n"
|
||||
"Please include the following information:\n\n"
|
||||
"file: '%s'\n"
|
||||
"line: %d\n"
|
||||
"stack:\n", file, line);
|
||||
|
||||
void* stacktrace[50];
|
||||
int size = backtrace(stack, 50);
|
||||
char** symbols = backtrace_symbols(stack, size);
|
||||
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
fprintf(stderr, "%d: %s\n", i, symbols[i]);
|
||||
}
|
||||
|
||||
free(symbols);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue