> On Mar 4, 2015, at 3:13 PM, Zachary Turner <[email protected]> wrote: > > Doesn't LLVM already have this functionality built in? How is this different > than writing: > > llvm::sys::PrintStackTraceOnErrorSignal();
This one is triggered on an error signal, and then exits. I don’t want to exit. > llvm::PrettyStackTraceProgram X(argc_, argv_); > This looks like a program-wide crash handler. I don’t want to crash. > in main? > I want this to work everywhere, not only in main. > On Wed, Mar 4, 2015 at 3:06 PM Enrico Granata <[email protected] > <mailto:[email protected]>> wrote: > Author: enrico > Date: Wed Mar 4 16:59:20 2015 > New Revision: 231310 > > URL: http://llvm.org/viewvc/llvm-project?rev=231310&view=rev > <http://llvm.org/viewvc/llvm-project?rev=231310&view=rev> > Log: > Introduce lldbassert(x) > > We would like it if LLDB never crashed, especially if we never caused LLDB to > crash > On the other hand, having assertions can sometimes be useful > > lldbassert(x) is the best of both worlds: > - in debug builds, it turns into a regular assert, which is fine because we > don't mind debug LLDB to crash on development machines > - in non-debug builds, it emits a message formatted just like assert(x) > would, but then instead of crashing, it dumps a backtrace, suggests filing a > bug, and keeps running > > > Added: > lldb/trunk/include/lldb/Utility/LLDBAssert.h > lldb/trunk/source/Utility/LLDBAssert.cpp > Modified: > lldb/trunk/lldb.xcodeproj/project.pbxproj > > Added: lldb/trunk/include/lldb/Utility/LLDBAssert.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/LLDBAssert.h?rev=231310&view=auto > > <http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/LLDBAssert.h?rev=231310&view=auto> > ============================================================================== > --- lldb/trunk/include/lldb/Utility/LLDBAssert.h (added) > +++ lldb/trunk/include/lldb/Utility/LLDBAssert.h Wed Mar 4 16:59:20 2015 > @@ -0,0 +1,30 @@ > +//===----------------- LLDBAssert.h --------------------------------*- C++ > -*-===// > +// > +// The LLVM Compiler Infrastructure > +// > +// This file is distributed under the University of Illinois Open Source > +// License. See LICENSE.TXT for details. > +// > +//===----------------------------------------------------------------------===// > + > +#ifndef utility_LLDBAssert_h_ > +#define utility_LLDBAssert_h_ > + > +#include <assert.h> > + > +#ifdef LLDB_CONFIGURATION_DEBUG > +#define lldbassert(x) assert(x) > +#else > +#define lldbassert(x) lldb_private::lldb_assert(x, #x, __FUNCTION__, > __FILE__, __LINE__) > +#endif > + > +namespace lldb_private { > + void > + lldb_assert (int expression, > + const char* expr_text, > + const char* func, > + const char* file, > + unsigned int line); > +} > + > +#endif // utility_LLDBAssert_h_ > > Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=231310&r1=231309&r2=231310&view=diff > > <http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=231310&r1=231309&r2=231310&view=diff> > ============================================================================== > --- lldb/trunk/lldb.xcodeproj/project.pbxproj (original) > +++ lldb/trunk/lldb.xcodeproj/project.pbxproj Wed Mar 4 16:59:20 2015 > @@ -770,6 +770,7 @@ > 942AFF0719F84C02007B43B4 /* LibCxxInitializerList.cpp in > Sources */ = {isa = PBXBuildFile; fileRef = 942AFF0619F84C02007B43B4 /* > LibCxxInitializerList.cpp */; }; > 94380B8219940B0A00BFE4A8 /* StringLexer.cpp in Sources */ = > {isa = PBXBuildFile; fileRef = 94380B8119940B0A00BFE4A8 /* StringLexer.cpp > */; }; > 9439FB1A19EF140C006FD6A4 /* NSIndexPath.cpp in Sources */ = > {isa = PBXBuildFile; fileRef = 9439FB1919EF140C006FD6A4 /* NSIndexPath.cpp > */; }; > + 943BDEFE1AA7B2F800789CE8 /* LLDBAssert.cpp in Sources */ = > {isa = PBXBuildFile; fileRef = 943BDEFD1AA7B2F800789CE8 /* LLDBAssert.cpp */; > }; > 944372DC171F6B4300E57C32 /* RegisterContextDummy.cpp in > Sources */ = {isa = PBXBuildFile; fileRef = 944372DA171F6B4300E57C32 /* > RegisterContextDummy.cpp */; }; > 944372DD171F6B4300E57C32 /* RegisterContextDummy.h in Headers > */ = {isa = PBXBuildFile; fileRef = 944372DB171F6B4300E57C32 /* > RegisterContextDummy.h */; }; > 9443B122140C18C40013457C /* SBData.cpp in Sources */ = {isa = > PBXBuildFile; fileRef = 9443B121140C18C10013457C /* SBData.cpp */; }; > @@ -2397,6 +2398,8 @@ > 94380B8019940B0300BFE4A8 /* StringLexer.h */ = {isa = > PBXFileReference; lastKnownFileType = sourcecode.c.h; name = StringLexer.h; > path = include/lldb/Utility/StringLexer.h; sourceTree = "<group>"; }; > 94380B8119940B0A00BFE4A8 /* StringLexer.cpp */ = {isa = > PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; > name = StringLexer.cpp; path = source/Utility/StringLexer.cpp; sourceTree = > "<group>"; }; > 9439FB1919EF140C006FD6A4 /* NSIndexPath.cpp */ = {isa = > PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; > name = NSIndexPath.cpp; path = source/DataFormatters/NSIndexPath.cpp; > sourceTree = "<group>"; }; > + 943BDEFC1AA7B2DE00789CE8 /* LLDBAssert.h */ = {isa = > PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LLDBAssert.h; > path = include/lldb/Utility/LLDBAssert.h; sourceTree = "<group>"; }; > + 943BDEFD1AA7B2F800789CE8 /* LLDBAssert.cpp */ = {isa = > PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; > name = LLDBAssert.cpp; path = source/Utility/LLDBAssert.cpp; sourceTree = > "<group>"; }; > 944372DA171F6B4300E57C32 /* RegisterContextDummy.cpp */ = > {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = > sourcecode.cpp.cpp; name = RegisterContextDummy.cpp; path = > Utility/RegisterContextDummy.cpp; sourceTree = "<group>"; }; > 944372DB171F6B4300E57C32 /* RegisterContextDummy.h */ = {isa > = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; > name = RegisterContextDummy.h; path = Utility/RegisterContextDummy.h; > sourceTree = "<group>"; }; > 9443B120140C18A90013457C /* SBData.h */ = {isa = > PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SBData.h; path = > include/lldb/API/SBData.h; sourceTree = "<group>"; }; > @@ -3455,6 +3458,8 @@ > 4C73152119B7D71700F865A4 /* Iterable.h */, > 942829541A89614000521B30 /* JSON.h */, > 942829551A89614C00521B30 /* JSON.cpp */, > + 943BDEFC1AA7B2DE00789CE8 /* LLDBAssert.h */, > + 943BDEFD1AA7B2F800789CE8 /* LLDBAssert.cpp */, > 26D1804416CEE12500EDFB5B /* KQueue.h */, > 26D1803C16CEBFD300EDFB5B /* KQueue.cpp */, > 94031A9F13CF5B3D00DCFF3C /* > PriorityPointerPair.h */, > @@ -5946,6 +5951,7 @@ > 2689006413353E0E00698AC0 /* > ClangUserExpression.cpp in Sources */, > 4C3ADCD61810D88B00357218 /* > BreakpointResolverFileRegex.cpp in Sources */, > 2689006513353E0E00698AC0 /* > ClangUtilityFunction.cpp in Sources */, > + 943BDEFE1AA7B2F800789CE8 /* LLDBAssert.cpp in > Sources */, > 26474CB418D0CB180073DEBA /* > RegisterContextLinux_x86_64.cpp in Sources */, > 2689006613353E0E00698AC0 /* > DWARFExpression.cpp in Sources */, > 2689006713353E0E00698AC0 /* ASTDumper.cpp in > Sources */, > > Added: lldb/trunk/source/Utility/LLDBAssert.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/LLDBAssert.cpp?rev=231310&view=auto > > <http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/LLDBAssert.cpp?rev=231310&view=auto> > ============================================================================== > --- lldb/trunk/source/Utility/LLDBAssert.cpp (added) > +++ lldb/trunk/source/Utility/LLDBAssert.cpp Wed Mar 4 16:59:20 2015 > @@ -0,0 +1,38 @@ > +//===--------------------- LLDBAssert.cpp --------------------------*- C++ > -*-===// > +// > +// The LLVM Compiler Infrastructure > +// > +// This file is distributed under the University of Illinois Open Source > +// License. See LICENSE.TXT for details. > +// > +//===----------------------------------------------------------------------===// > + > +#include "lldb/Utility/LLDBAssert.h" > +#include "lldb/Core/StreamString.h" > +#include "lldb/Host/Host.h" > + > +using namespace lldb_private; > + > +void > +lldb_private::lldb_assert (int expression, > + const char* expr_text, > + const char* func, > + const char* file, > + unsigned int line) > +{ > + if (expression) > + ; > + else > + { > + StreamString stream; > + stream.Printf("Assertion failed: (%s), function %s, file %s, line > %u\n", > + expr_text, > + func, > + file, > + line); > + stream.Printf("backtrace leading to the failure:\n"); > + Host::Backtrace(stream, 1000); > + stream.Printf("please file a bug report against lldb reporting this > failure log, and as many details as possible\n"); > + printf("%s\n", stream.GetData()); > + } > +} > > > _______________________________________________ > lldb-commits mailing list > [email protected] <mailto:[email protected]> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits > <http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits> Thanks, - Enrico 📩 egranata@.com ☎️ 27683
_______________________________________________ lldb-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
