Do a unit test without debug symbols
This commit is contained in:
parent
b498dead92
commit
f16c36e0b6
@ -70,6 +70,19 @@ include(cmake/Autoconfig.cmake)
|
||||
|
||||
# =================================================== Library Setup ====================================================
|
||||
|
||||
if(NOT CPPTRACE_BUILD_NO_SYMBOLS)
|
||||
set(
|
||||
debug
|
||||
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-g>
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/DEBUG>
|
||||
)
|
||||
else()
|
||||
add_compile_options($<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-g0>)
|
||||
set(
|
||||
debug
|
||||
)
|
||||
endif()
|
||||
|
||||
# Target that we can modify (can't modify ALIAS targets)
|
||||
# Target name should not be the same as ${PROJECT_NAME}, causes add_subdirectory issues
|
||||
set(target_name "cpptrace-lib")
|
||||
|
||||
@ -7,12 +7,6 @@ set(
|
||||
${warning_options} $<$<CXX_COMPILER_ID:GNU>:-Wno-infinite-recursion>
|
||||
)
|
||||
|
||||
set(
|
||||
debug
|
||||
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-g>
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/DEBUG>
|
||||
)
|
||||
|
||||
include(FetchContent)
|
||||
set(BENCHMARK_ENABLE_TESTING OFF)
|
||||
FetchContent_Declare(
|
||||
|
||||
@ -34,6 +34,7 @@ def build(runner: MatrixRunner):
|
||||
"-DCPPTRACE_STD_FORMAT=Off",
|
||||
"-DCPPTRACE_BUILD_TESTING=On",
|
||||
f"-DCPPTRACE_SANITIZER_BUILD={matrix['sanitizers']}",
|
||||
f"-DCPPTRACE_BUILD_NO_SYMBOLS={matrix['symbols']}",
|
||||
f"-DCPPTRACE_BUILD_TESTING_SPLIT_DWARF={matrix['split_dwarf']}",
|
||||
f"-DCPPTRACE_BUILD_TESTING_DWARF_VERSION={matrix['dwarf_version']}",
|
||||
f"-DCPPTRACE_USE_EXTERNAL_LIBDWARF=On",
|
||||
@ -61,6 +62,7 @@ def build(runner: MatrixRunner):
|
||||
"-DCPPTRACE_STD_FORMAT=Off",
|
||||
"-DCPPTRACE_BUILD_TESTING=On",
|
||||
f"-DCPPTRACE_SANITIZER_BUILD={matrix['sanitizers']}",
|
||||
f"-DCPPTRACE_BUILD_NO_SYMBOLS={matrix['symbols']}",
|
||||
# f"-DCPPTRACE_BUILD_TESTING_SPLIT_DWARF={matrix['split_dwarf']}",
|
||||
# f"-DCPPTRACE_BUILD_TESTING_SPLIT_DWARF={matrix['dwarf_version']}",
|
||||
f"-DCPPTRACE_USE_EXTERNAL_LIBDWARF=On",
|
||||
@ -122,6 +124,7 @@ def run_linux_matrix():
|
||||
"has_dl_find_object": ["OFF", "ON"],
|
||||
"split_dwarf": ["OFF", "ON"],
|
||||
"dwarf_version": ["4", "5"],
|
||||
"symbols": ["On", "Off"],
|
||||
},
|
||||
exclude = [
|
||||
{
|
||||
@ -144,6 +147,7 @@ def run_macos_matrix():
|
||||
"build_type": ["Debug", "RelWithDebInfo"],
|
||||
"shared": ["OFF", "ON"],
|
||||
"dSYM": [True, False],
|
||||
"symbols": ["On", "Off"],
|
||||
},
|
||||
exclude = [
|
||||
{
|
||||
|
||||
@ -152,12 +152,14 @@ option(CPPTRACE_ADDR2LINE_SEARCH_SYSTEM_PATH "" OFF)
|
||||
if(PROJECT_IS_TOP_LEVEL)
|
||||
option(CPPTRACE_BUILD_TESTING "" OFF)
|
||||
option(CPPTRACE_BUILD_BENCHMARK "" OFF)
|
||||
option(CPPTRACE_BUILD_NO_SYMBOLS "" OFF)
|
||||
option(CPPTRACE_BUILD_TESTING_SPLIT_DWARF "" OFF)
|
||||
set(CPPTRACE_BUILD_TESTING_DWARF_VERSION "0" CACHE STRING "")
|
||||
option(CPPTRACE_BUILD_TEST_RDYNAMIC "" OFF)
|
||||
mark_as_advanced(
|
||||
CPPTRACE_BUILD_TESTING
|
||||
CPPTRACE_BUILD_BENCHMARKING
|
||||
CPPTRACE_BUILD_BENCHMARK
|
||||
CPPTRACE_BUILD_NO_SYMBOLS
|
||||
CPPTRACE_BUILD_TESTING_SPLIT_DWARF
|
||||
CPPTRACE_BUILD_TESTING_DWARF_VERSION
|
||||
CPPTRACE_BUILD_TEST_RDYNAMIC
|
||||
|
||||
@ -7,12 +7,6 @@ set(
|
||||
${warning_options} $<$<CXX_COMPILER_ID:GNU>:-Wno-infinite-recursion>
|
||||
)
|
||||
|
||||
set(
|
||||
debug
|
||||
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-g>
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/DEBUG>
|
||||
)
|
||||
|
||||
macro(add_test_dependencies exec_name)
|
||||
target_compile_features(${exec_name} PRIVATE cxx_std_11)
|
||||
target_link_libraries(${exec_name} PRIVATE ${target_name})
|
||||
@ -25,10 +19,12 @@ macro(add_test_dependencies exec_name)
|
||||
target_compile_options(${exec_name} PRIVATE -gdwarf-${CPPTRACE_BUILD_TESTING_DWARF_VERSION})
|
||||
endif()
|
||||
# Clang has been fast to adopt dwarf 5, other tools (e.g. addr2line from binutils) have not
|
||||
if(NOT CPPTRACE_BUILD_NO_SYMBOLS)
|
||||
check_cxx_compiler_flag("-gdwarf-4" HAS_DWARF4)
|
||||
if(HAS_DWARF4)
|
||||
target_compile_options(${exec_name} PRIVATE "$<$<CONFIG:Debug>:-gdwarf-4>")
|
||||
endif()
|
||||
endif()
|
||||
# TODO: add debug info for mingw clang?
|
||||
if(CPPTRACE_BUILD_TEST_RDYNAMIC)
|
||||
set_property(TARGET ${exec_name} PROPERTY ENABLE_EXPORTS ON)
|
||||
@ -105,6 +101,9 @@ if(NOT CPPTRACE_SKIP_UNIT)
|
||||
if(CPPTRACE_SANITIZER_BUILD)
|
||||
target_compile_definitions(unittest PRIVATE CPPTRACE_SANITIZER_BUILD)
|
||||
endif()
|
||||
if(CPPTRACE_BUILD_NO_SYMBOLS)
|
||||
target_compile_definitions(unittest PRIVATE CPPTRACE_BUILD_NO_SYMBOLS)
|
||||
endif()
|
||||
target_include_directories(unittest PRIVATE ../src)
|
||||
add_test(NAME unittest COMMAND unittest)
|
||||
endif()
|
||||
|
||||
12
test/unit/tracing/common.hpp
Normal file
12
test/unit/tracing/common.hpp
Normal file
@ -0,0 +1,12 @@
|
||||
#ifndef TRACING_COMMON_HPP
|
||||
#define TRACING_COMMON_HPP
|
||||
|
||||
#ifndef CPPTRACE_BUILD_NO_SYMBOLS
|
||||
#define EXPECT_FILE(A, B) EXPECT_THAT((A), testing::EndsWith(B))
|
||||
#define EXPECT_LINE(A, B) EXPECT_EQ((A), (B))
|
||||
#else
|
||||
#define EXPECT_FILE(A, B)
|
||||
#define EXPECT_LINE(A, B)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@ -10,6 +10,8 @@
|
||||
#include <cpptrace/cpptrace.hpp>
|
||||
#include <cpptrace/from_current.hpp>
|
||||
|
||||
#include "common.hpp"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
|
||||
@ -52,8 +54,7 @@ TEST(FromCurrent, Basic) {
|
||||
trace.frames.begin(),
|
||||
trace.frames.end(),
|
||||
[](const cpptrace::stacktrace_frame& frame) {
|
||||
return frame.filename.find("from_current.cpp") != std::string::npos
|
||||
&& frame.symbol.find("lambda") == std::string::npos; // due to msvc
|
||||
return frame.symbol.find("stacktrace_from_current_3") != std::string::npos;
|
||||
}
|
||||
);
|
||||
ASSERT_NE(it, trace.frames.end());
|
||||
@ -61,29 +62,29 @@ TEST(FromCurrent, Basic) {
|
||||
int j = 0;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(j, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("from_current.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "from_current.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_from_current_3"));
|
||||
i++;
|
||||
j++;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(j, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("from_current.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "from_current.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_from_current_2"));
|
||||
i++;
|
||||
j++;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(j, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("from_current.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "from_current.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_from_current_1"));
|
||||
i++;
|
||||
j++;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(j, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("from_current.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "from_current.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("FromCurrent_Basic_Test::TestBody"));
|
||||
}
|
||||
}
|
||||
@ -104,8 +105,7 @@ TEST(FromCurrent, CorrectHandler) {
|
||||
trace.frames.begin(),
|
||||
trace.frames.end(),
|
||||
[](const cpptrace::stacktrace_frame& frame) {
|
||||
return frame.filename.find("from_current.cpp") != std::string::npos
|
||||
&& frame.symbol.find("lambda") == std::string::npos;
|
||||
return frame.symbol.find("stacktrace_from_current_3") != std::string::npos;
|
||||
}
|
||||
);
|
||||
EXPECT_NE(it, trace.frames.end());
|
||||
@ -134,8 +134,7 @@ TEST(FromCurrent, RawTrace) {
|
||||
trace.frames.begin(),
|
||||
trace.frames.end(),
|
||||
[](const cpptrace::stacktrace_frame& frame) {
|
||||
return frame.filename.find("from_current.cpp") != std::string::npos
|
||||
&& frame.symbol.find("lambda") == std::string::npos;
|
||||
return frame.symbol.find("stacktrace_from_current_3") != std::string::npos;
|
||||
}
|
||||
);
|
||||
EXPECT_NE(it, trace.frames.end());
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
#include "common.hpp"
|
||||
#include <algorithm>
|
||||
#include <string_view>
|
||||
#include <string>
|
||||
@ -10,6 +11,8 @@
|
||||
#include <cpptrace/cpptrace.hpp>
|
||||
#include <cpptrace/from_current.hpp>
|
||||
|
||||
#include "common.hpp"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
|
||||
@ -52,8 +55,7 @@ TEST(FromCurrentZ, Basic) {
|
||||
trace.frames.begin(),
|
||||
trace.frames.end(),
|
||||
[](const cpptrace::stacktrace_frame& frame) {
|
||||
return frame.filename.find("from_current_z.cpp") != std::string::npos
|
||||
&& frame.symbol.find("lambda") == std::string::npos; // due to msvc
|
||||
return frame.symbol.find("stacktrace_from_current_z_3") != std::string::npos;
|
||||
}
|
||||
);
|
||||
ASSERT_NE(it, trace.frames.end());
|
||||
@ -61,29 +63,29 @@ TEST(FromCurrentZ, Basic) {
|
||||
int j = 0;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(j, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("from_current_z.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "from_current_z.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_from_current_z_3"));
|
||||
i++;
|
||||
j++;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(j, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("from_current_z.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "from_current_z.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_from_current_z_2"));
|
||||
i++;
|
||||
j++;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(j, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("from_current_z.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "from_current_z.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_from_current_z_1"));
|
||||
i++;
|
||||
j++;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(j, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("from_current_z.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "from_current_z.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[j]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("FromCurrentZ_Basic_Test::TestBody"));
|
||||
}
|
||||
}
|
||||
@ -104,8 +106,7 @@ TEST(FromCurrentZ, CorrectHandler) {
|
||||
trace.frames.begin(),
|
||||
trace.frames.end(),
|
||||
[](const cpptrace::stacktrace_frame& frame) {
|
||||
return frame.filename.find("from_current_z.cpp") != std::string::npos
|
||||
&& frame.symbol.find("lambda") == std::string::npos;
|
||||
return frame.symbol.find("stacktrace_from_current_z_3") != std::string::npos;
|
||||
}
|
||||
);
|
||||
EXPECT_NE(it, trace.frames.end());
|
||||
@ -133,8 +134,7 @@ TEST(FromCurrentZ, RawTrace) {
|
||||
trace.frames.begin(),
|
||||
trace.frames.end(),
|
||||
[](const cpptrace::stacktrace_frame& frame) {
|
||||
return frame.filename.find("from_current_z.cpp") != std::string::npos
|
||||
&& frame.symbol.find("lambda") == std::string::npos;
|
||||
return frame.symbol.find("stacktrace_from_current_z_3") != std::string::npos;
|
||||
}
|
||||
);
|
||||
EXPECT_NE(it, trace.frames.end());
|
||||
|
||||
@ -5,8 +5,11 @@
|
||||
#include <gtest/gtest-matchers.h>
|
||||
#include <gmock/gmock.h>
|
||||
#include <gmock/gmock-matchers.h>
|
||||
|
||||
#include <cpptrace/cpptrace.hpp>
|
||||
|
||||
#include "common.hpp"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
|
||||
@ -39,7 +42,7 @@ CPPTRACE_FORCE_NO_INLINE void object_basic_resolution() {
|
||||
auto line = __LINE__ + 1;
|
||||
auto trace = cpptrace::generate_object_trace().resolve();
|
||||
ASSERT_GE(trace.frames.size(), 1);
|
||||
EXPECT_THAT(trace.frames[0].filename, testing::EndsWith("object_trace.cpp"));
|
||||
EXPECT_FILE(trace.frames[0].filename, "object_trace.cpp");
|
||||
EXPECT_EQ(trace.frames[0].line.value(), line);
|
||||
EXPECT_THAT(trace.frames[0].symbol, testing::HasSubstr("object_basic_resolution"));
|
||||
}
|
||||
@ -75,20 +78,20 @@ CPPTRACE_FORCE_NO_INLINE int object_resolve_3(std::vector<int>& line_numbers) {
|
||||
return 2;
|
||||
}
|
||||
int i = 0;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("object_trace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "object_trace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("object_resolve_3"));
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("object_trace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "object_trace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("object_resolve_2"));
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("object_trace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "object_trace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("object_resolve_1"));
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("object_trace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "object_trace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("ObjectTrace_Resolution_Test::TestBody"));
|
||||
return 2;
|
||||
}
|
||||
|
||||
@ -4,8 +4,11 @@
|
||||
#include <gtest/gtest-matchers.h>
|
||||
#include <gmock/gmock.h>
|
||||
#include <gmock/gmock-matchers.h>
|
||||
|
||||
#include <cpptrace/cpptrace.hpp>
|
||||
|
||||
#include "common.hpp"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
@ -29,8 +32,8 @@ CPPTRACE_FORCE_NO_INLINE void stacktrace_basic() {
|
||||
auto line = __LINE__ + 1;
|
||||
auto trace = cpptrace::generate_trace();
|
||||
ASSERT_GE(trace.frames.size(), 1);
|
||||
EXPECT_THAT(trace.frames[0].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[0].line.value(), line);
|
||||
EXPECT_FILE(trace.frames[0].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[0].line.value(), line);
|
||||
EXPECT_THAT(trace.frames[0].symbol, testing::HasSubstr("stacktrace_basic"));
|
||||
}
|
||||
|
||||
@ -51,20 +54,20 @@ CPPTRACE_FORCE_NO_INLINE int stacktrace_multi_3(std::vector<int>& line_numbers)
|
||||
return 2;
|
||||
}
|
||||
int i = 0;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_multi_3"));
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_multi_2"));
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_multi_1"));
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("Stacktrace_MultipleFrames_Test::TestBody"));
|
||||
return 2;
|
||||
}
|
||||
@ -114,25 +117,25 @@ TEST(Stacktrace, RawTraceResolution) {
|
||||
auto trace = raw.resolve();
|
||||
ASSERT_GE(trace.frames.size(), 4);
|
||||
int i = 0;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_raw_resolve_3"));
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_raw_resolve_2"));
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_raw_resolve_1"));
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("Stacktrace_RawTraceResolution_Test::TestBody"));
|
||||
}
|
||||
|
||||
|
||||
#ifdef CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF
|
||||
#if defined(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF) && !defined(CPPTRACE_BUILD_NO_SYMBOLS)
|
||||
CPPTRACE_FORCE_NO_INLINE int stacktrace_inline_resolution_3(std::vector<int>& line_numbers) {
|
||||
static volatile int lto_guard; lto_guard = lto_guard + 1;
|
||||
line_numbers.insert(line_numbers.begin(), __LINE__ + 1);
|
||||
@ -142,29 +145,29 @@ CPPTRACE_FORCE_NO_INLINE int stacktrace_inline_resolution_3(std::vector<int>& li
|
||||
return 2;
|
||||
}
|
||||
int i = 0;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_inline_resolution_3"));
|
||||
EXPECT_FALSE(trace.frames[i].is_inline);
|
||||
EXPECT_NE(trace.frames[i].raw_address, 0);
|
||||
EXPECT_NE(trace.frames[i].object_address, 0);
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_inline_resolution_2"));
|
||||
EXPECT_TRUE(trace.frames[i].is_inline);
|
||||
EXPECT_EQ(trace.frames[i].raw_address, 0);
|
||||
EXPECT_EQ(trace.frames[i].object_address, 0);
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_inline_resolution_1"));
|
||||
EXPECT_FALSE(trace.frames[i].is_inline);
|
||||
EXPECT_NE(trace.frames[i].raw_address, 0);
|
||||
EXPECT_NE(trace.frames[i].object_address, 0);
|
||||
i++;
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "stacktrace.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("Stacktrace_InlineResolution_Test::TestBody"));
|
||||
EXPECT_FALSE(trace.frames[i].is_inline);
|
||||
EXPECT_NE(trace.frames[i].raw_address, 0);
|
||||
|
||||
@ -8,6 +8,8 @@
|
||||
|
||||
#include <cpptrace/cpptrace.hpp>
|
||||
|
||||
#include "common.hpp"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
|
||||
@ -48,26 +50,26 @@ TEST(TracedException, Basic) {
|
||||
size_t i = 0;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(i, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("traced_exception.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "traced_exception.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_traced_object_3"));
|
||||
i++;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(i, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("traced_exception.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "traced_exception.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_traced_object_2"));
|
||||
i++;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(i, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("traced_exception.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "traced_exception.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("stacktrace_traced_object_1"));
|
||||
i++;
|
||||
ASSERT_LT(i, trace.frames.size());
|
||||
ASSERT_LT(i, line_numbers.size());
|
||||
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("traced_exception.cpp"));
|
||||
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_FILE(trace.frames[i].filename, "traced_exception.cpp");
|
||||
EXPECT_LINE(trace.frames[i].line.value(), line_numbers[i]);
|
||||
EXPECT_THAT(trace.frames[i].symbol, testing::HasSubstr("TracedException_Basic_Test::TestBody"));
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user