1 /* 2 * Copyright (c) Facebook, Inc. and its affiliates. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 // 18 // Exception tracer library. 19 20 #pragma once 21 22 #include <cstdint> 23 #include <iosfwd> 24 #include <typeinfo> 25 #include <vector> 26 27 #include <folly/portability/Config.h> 28 29 #if FOLLY_HAVE_ELF && FOLLY_HAVE_DWARF 30 31 namespace folly { 32 namespace exception_tracer { 33 34 struct ExceptionInfo { 35 const std::type_info* type{nullptr}; 36 // The values in frames are IP (instruction pointer) addresses. 37 // They are only filled if the low-level exception tracer library is 38 // linked in or LD_PRELOADed. 39 std::vector<uintptr_t> frames; // front() is top of stack 40 }; 41 42 void printExceptionInfo( 43 std::ostream& out, const ExceptionInfo& info, int options); 44 std::ostream& operator<<(std::ostream& out, const ExceptionInfo& info); 45 46 /** 47 * Get current exceptions being handled. front() is the most recent exception. 48 * There should be at most one unless rethrowing. 49 */ 50 std::vector<ExceptionInfo> getCurrentExceptions(); 51 52 /** 53 * Install the terminate / unexpected handlers to dump exceptions. 54 */ 55 void installHandlers(); 56 57 } // namespace exception_tracer 58 } // namespace folly 59 60 #endif // FOLLY_HAVE_ELF && FOLLY_HAVE_DWARF 61