}
};
+/** Exception raised when something is going wrong during the simulation tracing */
+class TracingError : public xbt_ex {
+public:
+ TracingError(simgrid::xbt::ThrowPoint&& throwpoint, std::string&& message)
+ : xbt_ex(std::move(throwpoint), std::move(message))
+ {
+ category = tracing_error;
+ }
+};
+
class XBT_PUBLIC ForcefulKillException {
/** @brief Exception launched to kill an actor; DO NOT BLOCK IT!
*
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "include/xbt/config.hpp"
+#include "simgrid/Exception.hpp"
#include "simgrid/s4u/Engine.hpp"
#include "src/instr/instr_private.hpp"
#include "surf/surf.hpp"
std::string filename = TRACE_get_filename();
tracing_file.open(filename.c_str(), std::ofstream::out);
if (tracing_file.fail()) {
- THROWF(system_error, 1, "Tracefile %s could not be opened for writing.", filename.c_str());
+ throw simgrid::TracingError(
+ XBT_THROW_POINT,
+ simgrid::xbt::string_printf("Tracefile %s could not be opened for writing.", filename.c_str()));
}
XBT_DEBUG("Filename %s is open for writing", filename.c_str());
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include "simgrid/Exception.hpp"
#include "simgrid/kernel/routing/NetPoint.hpp"
#include "src/instr/instr_private.hpp"
#include "src/surf/network_interface.hpp"
//check if mark_type is already declared
if (declared_marks.find(mark_type) != declared_marks.end()) {
- THROWF (tracing_error, 1, "mark_type with name (%s) is already declared", mark_type);
+ throw simgrid::TracingError(XBT_THROW_POINT,
+ simgrid::xbt::string_printf("mark_type with name (%s) is already declared", mark_type));
}
XBT_DEBUG("MARK,declare %s", mark_type);
simgrid::instr::EventType* type =
static_cast<simgrid::instr::EventType*>(simgrid::instr::Container::get_root()->type_->by_name(mark_type));
if (not type) {
- THROWF (tracing_error, 1, "mark_type with name (%s) is not declared", mark_type);
+ throw simgrid::TracingError(XBT_THROW_POINT,
+ simgrid::xbt::string_printf("mark_type with name (%s) is not declared", mark_type));
} else {
if (not mark_color)
mark_color = "1.0 1.0 1.0" /*white*/;
simgrid::instr::EventType* type =
static_cast<simgrid::instr::EventType*>(simgrid::instr::Container::get_root()->type_->by_name(mark_type));
if (not type) {
- THROWF (tracing_error, 1, "mark_type with name (%s) is not declared", mark_type);
+ throw simgrid::TracingError(XBT_THROW_POINT,
+ simgrid::xbt::string_printf("mark_type with name (%s) is not declared", mark_type));
} else {
XBT_DEBUG("MARK %s %s", mark_type, mark_value);
new simgrid::instr::NewEvent(MSG_get_clock(), simgrid::instr::Container::get_root(), type,
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include "simgrid/Exception.hpp"
#include "simgrid/s4u/Engine.hpp"
#include "simgrid/s4u/Host.hpp"
#include "src/instr/instr_private.hpp"
//register all kinds by name
if (not allContainers.emplace(name_, this).second)
- THROWF(tracing_error, 1, "container %s already present in allContainers data structure", get_cname());
+ throw simgrid::TracingError(
+ XBT_THROW_POINT,
+ simgrid::xbt::string_printf("container %s already present in allContainers data structure", get_cname()));
XBT_DEBUG("Add container name '%s'", get_cname());
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include "simgrid/Exception.hpp"
#include "simgrid/sg_config.hpp"
#include "src/instr/instr_private.hpp"
#include "src/instr/instr_smpi.hpp"
std::ifstream fs(filename.c_str(), std::ifstream::in);
if (fs.fail())
- THROWF(system_error, 1, "Comment file %s could not be opened for reading.", filename.c_str());
+ throw simgrid::TracingError(
+ XBT_THROW_POINT,
+ simgrid::xbt::string_printf("Comment file %s could not be opened for reading.", filename.c_str()));
while (not fs.eof()) {
std::string line;
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include "simgrid/Exception.hpp"
#include "src/instr/instr_private.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_paje_types, instr, "Paje tracing event system (types)");
: id_(instr_new_paje_id()), name_(name), color_(color), father_(father)
{
if (name_.empty() || alias.empty())
- THROWF(tracing_error, 0, "can't create a new type with no name or alias");
+ throw simgrid::TracingError(XBT_THROW_POINT, "can't create a new type with no name or alias");
if (father != nullptr){
father->children_[alias].reset(this);
for (auto const& elm : children_) {
if (elm.second->name_ == name) {
if (ret != nullptr) {
- THROWF (tracing_error, 0, "there are two children types with the same name?");
+ throw simgrid::TracingError(XBT_THROW_POINT, "there are two children types with the same name?");
} else {
ret = elm.second.get();
}
}
}
if (ret == nullptr)
- THROWF(tracing_error, 2, "type with name (%s) not found in father type (%s)", name.c_str(), get_cname());
+ throw simgrid::TracingError(
+ XBT_THROW_POINT,
+ simgrid::xbt::string_printf("type with name (%s) not found in father type (%s)", name.c_str(), get_cname()));
return ret;
}
void ValueType::add_entity_value(const std::string& name, const std::string& color)
{
if (name.empty())
- THROWF(tracing_error, 0, "can't get a value with no name");
+ throw simgrid::TracingError(XBT_THROW_POINT, "can't get a value with no name");
auto it = values_.find(name);
if (it == values_.end()) {
{
auto ret = values_.find(name);
if (ret == values_.end()) {
- THROWF(tracing_error, 2, "value with name (%s) not found in father type (%s)", name.c_str(), get_cname());
+ throw simgrid::TracingError(
+ XBT_THROW_POINT,
+ simgrid::xbt::string_printf("value with name (%s) not found in father type (%s)", name.c_str(), get_cname()));
}
return &ret->second;
}