Some fixes for stacktraces.
continuous-integration/drone/push Build is failing Details

Signed-off-by: Deukhoofd <Deukhoofd@gmail.com>
This commit is contained in:
Deukhoofd 2020-08-15 17:47:01 +02:00
parent de07dcda4d
commit 2b703954a5
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
3 changed files with 15 additions and 5 deletions

View File

@ -16,17 +16,16 @@ class ExceptionHandler {
static std::string _creatureLibLastExceptionStacktrace; static std::string _creatureLibLastExceptionStacktrace;
public: public:
static void SetLastArbUtException(const std::string& function, const ArbUt::Exception& e) { static void SetLastArbUtException(const std::string& function, const ArbUt::Exception& e, size_t depth = 6) {
std::stringstream ss; std::stringstream ss;
ss << "[" << function << "] " << e.what() << std::endl; ss << "[" << function << "] " << e.what();
_creatureLibLastException = ss.str(); _creatureLibLastException = ss.str();
_creatureLibLastExceptionStacktrace = e.GetStacktrace(); _creatureLibLastExceptionStacktrace = e.GetStacktrace(depth, true);
} }
static void SetLastException(const std::string& function, const std::exception& e) { static void SetLastException(const std::string& function, const std::exception& e) {
std::stringstream ss; std::stringstream ss;
ss << "[" << function << "] " << e.what(); ss << "[" << function << "] " << e.what();
_creatureLibLastException = ss.str(); _creatureLibLastException = ss.str();
_creatureLibLastExceptionStacktrace = "";
} }
static const char* GetLastException() { return _creatureLibLastException.c_str(); } static const char* GetLastException() { return _creatureLibLastException.c_str(); }
static const char* GetLastExceptionStacktrace() { return _creatureLibLastExceptionStacktrace.c_str(); } static const char* GetLastExceptionStacktrace() { return _creatureLibLastExceptionStacktrace.c_str(); }

View File

@ -43,6 +43,9 @@ endif (WINDOWS)
# Set up links to all relevant libraries. # Set up links to all relevant libraries.
SET(_LIBRARYLINKS Arbutils) SET(_LIBRARYLINKS Arbutils)
if (NOT WINDOWS)
set(_LIBRARYLINKS ${_LIBRARYLINKS} -lbfd -ldl)
endif ()
# If we need to link the C libraries statically, do so. # If we need to link the C libraries statically, do so.
if (STATICC) if (STATICC)

View File

@ -1,5 +1,6 @@
#ifdef TESTS_BUILD #ifdef TESTS_BUILD
#include <cstring> #include <cstring>
#include "../CInterface/Core.hpp"
#include "../extern/catch.hpp" #include "../extern/catch.hpp"
#include "../src/Library/Exceptions/CreatureException.hpp" #include "../src/Library/Exceptions/CreatureException.hpp"
@ -10,9 +11,16 @@ TEST_CASE("When throwing exception, what() is readable", "[Utilities]") {
} catch (const ArbUt::Exception& e) { } catch (const ArbUt::Exception& e) {
hasCaught = true; hasCaught = true;
INFO(e.what()); INFO(e.what());
REQUIRE(std::string(e.what()) == "[ExceptionTests.cpp:9] foobar"); REQUIRE(std::string(e.what()) == "[ExceptionTests.cpp:10] foobar");
} }
REQUIRE(hasCaught); REQUIRE(hasCaught);
} }
TEST_CASE("C Interface exception", "[Utilities]") {
ExceptionHandler::SetLastArbUtException("foo", ArbUt::Exception("foobar"), 1);
REQUIRE(std::string(ExceptionHandler::GetLastException()) == "[foo] foobar");
REQUIRE(std::string(ExceptionHandler::GetLastExceptionStacktrace()) ==
"ExceptionTests.cpp[20] ____C_A_T_C_H____T_E_S_T____3()\n");
}
#endif #endif