[Lldb-commits] [PATCH] D59911: Don't abort() in lldb_assert and document why.
Adrian Prantl via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Mar 27 16:55:20 PDT 2019
aprantl created this revision.
aprantl added reviewers: jingham, clayborg, labath, zturner, jasonmolenda.
Herald added a project: LLDB.
See the changes to the website for the full rationale.
Having a policy document that explains when to use what method of error handling in LLDB will make on-boarding new community members easier and help make sense of all the different options. Let me know if there is a better location for this text and/or if you disagree with the contents!
rdar://problem/49356014
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D59911
Files:
lldb/source/Utility/LLDBAssert.cpp
lldb/www/source.html
Index: lldb/www/source.html
===================================================================
--- lldb/www/source.html
+++ lldb/www/source.html
@@ -62,7 +62,51 @@
</ul>
For anything not explicitly listed here, assume that LLDB follows the LLVM policy.
</p>
- </div>
+ </div>
+ </div>
+ <div class="post">
+ <h1 class ="postheader">Error handling and use of assertions in LLDB</h1>
+ <div class="postcontent">
+ <p>
+ Contrary to clang, which is typically a short-lived process, LLDB debuggers
+ stay up and running for a long time, often serving multiple debug sessions
+ initiated by an IDE. For this reason LLDB code needs to be extra thoughtful
+ about how to handle errors. Below are a couple rule of thumbs:
+ <ul>
+ <li>Fatal errors.
+ Aborting LLDB's process using <tt>llvm::report_fatal_error()</tt> or <tt>abort</tt>
+ should be avoided at all costs. It's acceptable to use
+ <a href="http://llvm.org/doxygen/Support_2ErrorHandling_8h.html"><tt>llvm_unreachable()</tt></a>
+ for actually unreachable code such as the default in an otherwise exhaustive switch statement.
+ </li>
+ <li>Assertions.
+ Assertions (from <tt>assert.h</tt>) should be used liberally to assert internal consistency.
+ Assertions shall <em>never</em> be used to detect invalid user input, such as malformed DWARF.
+ An assertion should be placed to assert invariants that the developer is convinced will
+ always hold, regardless what an end-user does with LLDB.
+ </li>
+ <li>Invalid input.
+ To deal with invalid input, such as malformed DWARF, missing object files, or otherwise
+ inconsistent debug info, LLVM's error handling types such as
+ <a href="http://llvm.org/doxygen/classllvm_1_1Expected.html"><tt>llvm::Expected<T></tt></a>
+ should be used. Functions that may fail should return an
+ <a href="http://llvm.org/doxygen/classllvm_1_1Optional.html"><tt>llvm::Optional<T></tt></a>
+ result.
+ </li>
+ <li>Soft assertions.
+ LLDB provides <tt>lldb_assert()</tt> as a soft alternative to cover the middle ground
+ of situations that really indicate a bug in LLDB, but could conceivably happen.
+ In a Debug configuration <tt>lldb_assert()</tt> behaves like
+ <tt>assert()</tt>. In a Release configuration it will print a warning and encourage the
+ user to file a bug report, similar to LLVM's crash handler, and then return
+ execution. Use these sparingly and only if error handling is not otherwise feasible.
+ </li>
+ </ul>
+ Overall, please keep in mind that the debugger is often used as a last resort,
+ and a crash in the debugger is rarely appreciated by the end-user.
+ </p>
+ </div>
+ </div>
<div class="postfooter"></div>
</div>
</div>
Index: lldb/source/Utility/LLDBAssert.cpp
===================================================================
--- lldb/source/Utility/LLDBAssert.cpp
+++ lldb/source/Utility/LLDBAssert.cpp
@@ -27,5 +27,4 @@
llvm::sys::PrintStackTrace(errs());
errs() << "please file a bug report against lldb reporting this failure "
"log, and as many details as possible\n";
- abort();
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59911.192543.patch
Type: text/x-patch
Size: 4200 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20190327/f906acca/attachment-0001.bin>
More information about the lldb-commits
mailing list