Coverage Report

Created: 2023-09-30 09:22

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Target/AssertFrameRecognizer.h
Line
Count
Source
1
//===-- AssertFrameRecognizer.cpp -------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_TARGET_ASSERTFRAMERECOGNIZER_H
10
#define LLDB_TARGET_ASSERTFRAMERECOGNIZER_H
11
12
#include "lldb/Target/Process.h"
13
#include "lldb/Target/StackFrameRecognizer.h"
14
#include "lldb/Utility/ConstString.h"
15
#include "lldb/Utility/FileSpec.h"
16
17
#include <tuple>
18
19
namespace lldb_private {
20
21
/// Registers the assert stack frame recognizer.
22
///
23
/// \param[in] process
24
///    The process that is currently asserting. This will give us information on
25
///    the target and the platform.
26
void RegisterAssertFrameRecognizer(Process *process);
27
28
/// \class AssertRecognizedStackFrame
29
///
30
/// Holds the stack frame where the assert is called from.
31
class AssertRecognizedStackFrame : public RecognizedStackFrame {
32
public:
33
  AssertRecognizedStackFrame(lldb::StackFrameSP most_relevant_frame_sp);
34
  lldb::StackFrameSP GetMostRelevantFrame() override;
35
36
private:
37
  lldb::StackFrameSP m_most_relevant_frame;
38
};
39
40
/// \class AssertFrameRecognizer
41
///
42
/// When a thread stops, it checks depending on the platform if the top frame is
43
/// an abort stack frame. If so, it looks for an assert stack frame in the upper
44
/// frames and set it as the most relavant frame when found.
45
class AssertFrameRecognizer : public StackFrameRecognizer {
46
public:
47
4
  std::string GetName() override { return "Assert StackFrame Recognizer"; }
48
  lldb::RecognizedStackFrameSP
49
  RecognizeFrame(lldb::StackFrameSP frame_sp) override;
50
};
51
52
} // namespace lldb_private
53
54
#endif // LLDB_TARGET_ASSERTFRAMERECOGNIZER_H