| //===- llvm/Support/PrettyStackTrace.h - Pretty Crash Handling --*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines the PrettyStackTraceEntry class, which is used to make |
| // crashes give more contextual information about what the program was doing |
| // when it crashed. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_SUPPORT_PRETTYSTACKTRACE_H |
| #define LLVM_SUPPORT_PRETTYSTACKTRACE_H |
| |
| namespace llvm { |
| class raw_ostream; |
| |
| /// DisablePrettyStackTrace - Set this to true to disable this module. This |
| /// might be necessary if the host application installs its own signal |
| /// handlers which conflict with the ones installed by this module. |
| /// Defaults to false. |
| extern bool DisablePrettyStackTrace; |
| |
| /// PrettyStackTraceEntry - This class is used to represent a frame of the |
| /// "pretty" stack trace that is dumped when a program crashes. You can define |
| /// subclasses of this and declare them on the program stack: when they are |
| /// constructed and destructed, they will add their symbolic frames to a |
| /// virtual stack trace. This gets dumped out if the program crashes. |
| class PrettyStackTraceEntry { |
| const PrettyStackTraceEntry *NextEntry; |
| PrettyStackTraceEntry(const PrettyStackTraceEntry &); // DO NOT IMPLEMENT |
| void operator=(const PrettyStackTraceEntry&); // DO NOT IMPLEMENT |
| public: |
| PrettyStackTraceEntry(); |
| virtual ~PrettyStackTraceEntry(); |
| |
| /// print - Emit information about this stack frame to OS. |
| virtual void print(raw_ostream &OS) const = 0; |
| |
| /// getNextEntry - Return the next entry in the list of frames. |
| const PrettyStackTraceEntry *getNextEntry() const { return NextEntry; } |
| }; |
| |
| /// PrettyStackTraceString - This object prints a specified string (which |
| /// should not contain newlines) to the stream as the stack trace when a crash |
| /// occurs. |
| class PrettyStackTraceString : public PrettyStackTraceEntry { |
| const char *Str; |
| public: |
| PrettyStackTraceString(const char *str) : Str(str) {} |
| virtual void print(raw_ostream &OS) const; |
| }; |
| |
| /// PrettyStackTraceProgram - This object prints a specified program arguments |
| /// to the stream as the stack trace when a crash occurs. |
| class PrettyStackTraceProgram : public PrettyStackTraceEntry { |
| int ArgC; |
| const char *const *ArgV; |
| public: |
| PrettyStackTraceProgram(int argc, const char * const*argv) |
| : ArgC(argc), ArgV(argv) {} |
| virtual void print(raw_ostream &OS) const; |
| }; |
| |
| } // end namespace llvm |
| |
| #endif |