mirror of
https://github.com/CHN-beta/nixos.git
synced 2026-01-12 01:55:22 +08:00
packages.biu: simplify backtrace
This commit is contained in:
@@ -13,8 +13,7 @@ endif()
|
|||||||
|
|
||||||
find_package(magic_enum REQUIRED)
|
find_package(magic_enum REQUIRED)
|
||||||
find_package(fmt REQUIRED)
|
find_package(fmt REQUIRED)
|
||||||
find_package(Boost REQUIRED COMPONENTS headers iostreams filesystem system process stacktrace_from_exception
|
find_package(Boost REQUIRED COMPONENTS headers iostreams filesystem system process)
|
||||||
stacktrace_backtrace)
|
|
||||||
find_package(range-v3 REQUIRED)
|
find_package(range-v3 REQUIRED)
|
||||||
find_path(NAMEOF_INCLUDE_DIR nameof.hpp REQUIRED)
|
find_path(NAMEOF_INCLUDE_DIR nameof.hpp REQUIRED)
|
||||||
find_package(Eigen3 REQUIRED)
|
find_package(Eigen3 REQUIRED)
|
||||||
@@ -22,13 +21,12 @@ set(HIGHFIVE_FIND_HDF5 Off)
|
|||||||
find_package(HighFive REQUIRED)
|
find_package(HighFive REQUIRED)
|
||||||
find_path(ZPP_BITS_INCLUDE_DIR zpp_bits.h REQUIRED)
|
find_path(ZPP_BITS_INCLUDE_DIR zpp_bits.h REQUIRED)
|
||||||
find_package(TgBot REQUIRED)
|
find_package(TgBot REQUIRED)
|
||||||
find_path(LIBBACKTRACE_INCLUDE_DIR backtrace.h REQUIRED)
|
|
||||||
find_library(LIBBACKTRACE_LIBRARY NAMES backtrace REQUIRED)
|
|
||||||
find_package(HDF5 REQUIRED)
|
find_package(HDF5 REQUIRED)
|
||||||
find_package(concurrencpp REQUIRED)
|
find_package(concurrencpp REQUIRED)
|
||||||
find_path(POCKETFFT_INCLUDE_DIR pocketfft.h REQUIRED)
|
find_path(POCKETFFT_INCLUDE_DIR pocketfft.h REQUIRED)
|
||||||
find_package(yaml-cpp REQUIRED)
|
find_package(yaml-cpp REQUIRED)
|
||||||
find_package(glaze REQUIRED)
|
find_package(glaze REQUIRED)
|
||||||
|
find_package(cpptrace REQUIRED)
|
||||||
|
|
||||||
add_library(biu src/common.cpp src/hdf5.cpp src/string.cpp)
|
add_library(biu src/common.cpp src/hdf5.cpp src/string.cpp)
|
||||||
target_include_directories(biu PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
target_include_directories(biu PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
@@ -36,7 +34,7 @@ target_include_directories(biu PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_D
|
|||||||
${LIBBACKTRACE_INCLUDE_DIR} ${POCKETFFT_INCLUDE_DIR})
|
${LIBBACKTRACE_INCLUDE_DIR} ${POCKETFFT_INCLUDE_DIR})
|
||||||
target_link_libraries(biu PUBLIC magic_enum::magic_enum fmt::fmt Boost::headers Boost::iostreams Boost::filesystem
|
target_link_libraries(biu PUBLIC magic_enum::magic_enum fmt::fmt Boost::headers Boost::iostreams Boost::filesystem
|
||||||
range-v3::range-v3 Eigen3::Eigen HighFive TgBot::TgBot ${LIBBACKTRACE_LIBRARY} hdf5::hdf5 concurrencpp::concurrencpp
|
range-v3::range-v3 Eigen3::Eigen HighFive TgBot::TgBot ${LIBBACKTRACE_LIBRARY} hdf5::hdf5 concurrencpp::concurrencpp
|
||||||
yaml-cpp::yaml-cpp glaze::glaze Boost::process Boost::stacktrace_from_exception Boost::stacktrace_backtrace)
|
yaml-cpp::yaml-cpp glaze::glaze Boost::process cpptrace::cpptrace)
|
||||||
target_compile_features(biu PUBLIC cxx_std_23)
|
target_compile_features(biu PUBLIC cxx_std_23)
|
||||||
target_compile_options(biu PUBLIC -Wno-gnu-string-literal-operator-template)
|
target_compile_options(biu PUBLIC -Wno-gnu-string-literal-operator-template)
|
||||||
install(TARGETS biu EXPORT biuTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
install(TARGETS biu EXPORT biuTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
|||||||
@@ -1,18 +1,16 @@
|
|||||||
include("${CMAKE_CURRENT_LIST_DIR}/biuTargets.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/biuTargets.cmake")
|
||||||
find_package(magic_enum REQUIRED)
|
find_package(magic_enum REQUIRED)
|
||||||
find_package(fmt REQUIRED)
|
find_package(fmt REQUIRED)
|
||||||
find_package(Boost REQUIRED COMPONENTS headers iostreams filesystem system process stacktrace_from_exception
|
find_package(Boost REQUIRED COMPONENTS headers iostreams filesystem system process)
|
||||||
stacktrace_backtrace)
|
|
||||||
find_package(range-v3 REQUIRED)
|
find_package(range-v3 REQUIRED)
|
||||||
find_path(NAMEOF_INCLUDE_DIR nameof.hpp REQUIRED)
|
find_path(NAMEOF_INCLUDE_DIR nameof.hpp REQUIRED)
|
||||||
find_package(Eigen3 REQUIRED)
|
find_package(Eigen3 REQUIRED)
|
||||||
find_package(HighFive REQUIRED)
|
find_package(HighFive REQUIRED)
|
||||||
find_path(ZPP_BITS_INCLUDE_DIR zpp_bits.h REQUIRED)
|
find_path(ZPP_BITS_INCLUDE_DIR zpp_bits.h REQUIRED)
|
||||||
find_package(TgBot REQUIRED)
|
find_package(TgBot REQUIRED)
|
||||||
find_path(LIBBACKTRACE_INCLUDE_DIR backtrace.h REQUIRED)
|
|
||||||
find_library(LIBBACKTRACE_LIBRARY NAMES backtrace REQUIRED)
|
|
||||||
find_package(HDF5 REQUIRED)
|
find_package(HDF5 REQUIRED)
|
||||||
find_package(concurrencpp REQUIRED)
|
find_package(concurrencpp REQUIRED)
|
||||||
find_path(POCKETFFT_INCLUDE_DIR pocketfft.h REQUIRED)
|
find_path(POCKETFFT_INCLUDE_DIR pocketfft.h REQUIRED)
|
||||||
find_package(yaml-cpp REQUIRED)
|
find_package(yaml-cpp REQUIRED)
|
||||||
find_package(glaze REQUIRED)
|
find_package(glaze REQUIRED)
|
||||||
|
find_package(cpptrace REQUIRED)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
stdenv, cmake, lib,
|
stdenv, cmake, lib,
|
||||||
magic-enum, fmt, boost, eigen, range-v3, nameof, zpp-bits, highfive, tgbot-cpp, libbacktrace, hdf5, concurrencpp,
|
magic-enum, fmt, boost, eigen, range-v3, nameof, zpp-bits, highfive, tgbot-cpp, libbacktrace, hdf5, concurrencpp,
|
||||||
pocketfft, yaml-cpp, glaze
|
pocketfft, yaml-cpp, glaze, cpptrace
|
||||||
}: stdenv.mkDerivation rec
|
}: stdenv.mkDerivation rec
|
||||||
{
|
{
|
||||||
name = "biu";
|
name = "biu";
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
[
|
[
|
||||||
magic-enum fmt boost range-v3 nameof zpp-bits eigen libbacktrace hdf5
|
magic-enum fmt boost range-v3 nameof zpp-bits eigen libbacktrace hdf5
|
||||||
concurrencpp pocketfft yaml-cpp glaze (highfive.override { inherit boost; }) (tgbot-cpp.override { inherit boost; })
|
concurrencpp pocketfft yaml-cpp glaze (highfive.override { inherit boost; }) (tgbot-cpp.override { inherit boost; })
|
||||||
|
cpptrace
|
||||||
];
|
];
|
||||||
propagatedBuildInputs = buildInputs;
|
propagatedBuildInputs = buildInputs;
|
||||||
nativeBuildInputs = [ cmake ];
|
nativeBuildInputs = [ cmake ];
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
# pragma once
|
# pragma once
|
||||||
# include <map>
|
# include <map>
|
||||||
# define BOOST_STACKTRACE_USE_BACKTRACE
|
|
||||||
# include <boost/stacktrace.hpp>
|
|
||||||
# include <biu/atomic.hpp>
|
# include <biu/atomic.hpp>
|
||||||
|
|
||||||
namespace biu
|
namespace biu
|
||||||
@@ -85,12 +83,6 @@ namespace biu
|
|||||||
public: [[gnu::always_inline]] inline void error(const std::string& message) const;
|
public: [[gnu::always_inline]] inline void error(const std::string& message) const;
|
||||||
public: [[gnu::always_inline]] inline void info(const std::string& message) const;
|
public: [[gnu::always_inline]] inline void info(const std::string& message) const;
|
||||||
public: [[gnu::always_inline]] inline void debug(const std::string& message) const;
|
public: [[gnu::always_inline]] inline void debug(const std::string& message) const;
|
||||||
|
|
||||||
public: [[gnu::always_inline]] inline void print_exception
|
|
||||||
(
|
|
||||||
std::optional<std::pair<std::string, std::string>> type_and_message,
|
|
||||||
const boost::stacktrace::stacktrace& stacktrace
|
|
||||||
) const;
|
|
||||||
};
|
};
|
||||||
friend class Guard;
|
friend class Guard;
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
# include <biu/common.hpp>
|
# include <biu/common.hpp>
|
||||||
# include <biu/format.hpp>
|
# include <biu/format.hpp>
|
||||||
# include <boost/exception/diagnostic_information.hpp>
|
# include <boost/exception/diagnostic_information.hpp>
|
||||||
|
# include <cpptrace/cpptrace.hpp>
|
||||||
|
# include <cpptrace/from_current.hpp>
|
||||||
|
|
||||||
namespace biu
|
namespace biu
|
||||||
{
|
{
|
||||||
@@ -70,8 +72,12 @@ namespace biu
|
|||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
log.error(boost::current_exception_diagnostic_information());
|
log.error(boost::current_exception_diagnostic_information());
|
||||||
log.print_exception
|
if (auto&& lock = LoggerConfig_.lock(); lock->Level >= Logger::Level::Error)
|
||||||
(std::nullopt, boost::stacktrace::stacktrace::from_current_exception());
|
{
|
||||||
|
static_assert(std::same_as<std::size_t, std::uint64_t>);
|
||||||
|
cpptrace::from_current_exception().print(*lock->Stream);
|
||||||
|
*lock->Stream << std::flush;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,13 +123,13 @@ namespace biu
|
|||||||
{
|
{
|
||||||
static_assert(std::same_as<std::size_t, std::uint64_t>);
|
static_assert(std::same_as<std::size_t, std::uint64_t>);
|
||||||
auto time = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
|
auto time = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
|
||||||
boost::stacktrace::stacktrace stack;
|
auto frame = cpptrace::stacktrace::current(0, 1).frames[0];
|
||||||
# ifdef BIU_LOGGER_SOURCE_ROOT
|
# ifdef BIU_LOGGER_SOURCE_ROOT
|
||||||
auto source_root = std::string_view(BIU_LOGGER_SOURCE_ROOT "/");
|
auto source_root = std::string_view(BIU_LOGGER_SOURCE_ROOT "/");
|
||||||
auto source_file = stack[0].source_file().starts_with(source_root) ?
|
auto source_file = frame.filename.starts_with(source_root) ?
|
||||||
stack[0].source_file().substr(source_root.size()) : stack[0].source_file();
|
frame.filename.substr(source_root.size()) : frame.filename;
|
||||||
# else
|
# else
|
||||||
auto source_file = stack[0].source_file();
|
auto source_file = frame.filename;
|
||||||
# endif
|
# endif
|
||||||
*lock->Stream << "[ {:%T} {:02x} {:02} ] {} (at {}:{} {} )\n"_f
|
*lock->Stream << "[ {:%T} {:02x} {:02} ] {} (at {}:{} {} )\n"_f
|
||||||
(
|
(
|
||||||
@@ -132,8 +138,8 @@ namespace biu
|
|||||||
Indent_,
|
Indent_,
|
||||||
message,
|
message,
|
||||||
source_file.empty() ? "??"s : source_file,
|
source_file.empty() ? "??"s : source_file,
|
||||||
stack[0].source_line() == 0 ? "??"s : "{}"_f(stack[0].source_line()),
|
frame.line.has_value() ? "{}"_f(frame.line.value()) : "??"s,
|
||||||
stack[0].name()
|
frame.symbol
|
||||||
) << std::flush;
|
) << std::flush;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,26 +153,5 @@ namespace biu
|
|||||||
return std::forward<T>(value);
|
return std::forward<T>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Logger::Guard::print_exception
|
|
||||||
(
|
|
||||||
std::optional<std::pair<std::string, std::string>> type_and_message,
|
|
||||||
const boost::stacktrace::stacktrace& stacktrace
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
if (type_and_message) log<Level::Error>("{}: {}"_f(type_and_message->first, type_and_message->second));
|
|
||||||
if (auto&& lock = LoggerConfig_.lock(); lock->Level >= Logger::Level::Error)
|
|
||||||
{
|
|
||||||
static_assert(std::same_as<std::size_t, std::uint64_t>);
|
|
||||||
for (auto frame : stacktrace)
|
|
||||||
*lock->Stream << "\tfrom {}:{} {}\n"_f
|
|
||||||
(
|
|
||||||
frame.source_file().empty() ? "??"s : frame.source_file(),
|
|
||||||
frame.source_line() == 0 ? "??"s : "{}"_f(frame.source_line()),
|
|
||||||
frame.name()
|
|
||||||
);
|
|
||||||
*lock->Stream << std::flush;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Atomic<std::map<std::size_t, std::size_t>> Logger::Threads_;
|
inline Atomic<std::map<std::size_t, std::size_t>> Logger::Threads_;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,8 +68,7 @@ inputs: rec
|
|||||||
# TODO: report glaze bug to upstream
|
# TODO: report glaze bug to upstream
|
||||||
inherit (inputs.pkgs.pkgs-2411) glaze;
|
inherit (inputs.pkgs.pkgs-2411) glaze;
|
||||||
stdenv = inputs.pkgs.clang18Stdenv;
|
stdenv = inputs.pkgs.clang18Stdenv;
|
||||||
boost = (inputs.pkgs.boost188.override { extraB2Args = [ "boost.stacktrace.backtrace=on" ]; }).overrideAttrs
|
boost = inputs.pkgs.boost188;
|
||||||
(prev: { buildInputs = prev.buildInputs ++ [(inputs.pkgs.libbacktrace.override { enableStatic = true; })]; });
|
|
||||||
fmt = inputs.pkgs.fmt_11.overrideAttrs (prev: { patches = prev.patches or [] ++ [ ./biu/fmt.patch ]; });
|
fmt = inputs.pkgs.fmt_11.overrideAttrs (prev: { patches = prev.patches or [] ++ [ ./biu/fmt.patch ]; });
|
||||||
};
|
};
|
||||||
hpcstat = inputs.pkgs.callPackage ./hpcstat
|
hpcstat = inputs.pkgs.callPackage ./hpcstat
|
||||||
|
|||||||
Reference in New Issue
Block a user