diff --git a/src/traces/tracer.cpp b/src/traces/tracer.cpp index 9f6dfb9470b33f655ab84a2cb6baa3b19b36efb3..99dadd76ab170331d523c683615e27abb5f16221 100644 --- a/src/traces/tracer.cpp +++ b/src/traces/tracer.cpp @@ -88,11 +88,12 @@ Tracer::Tracer(const std::string n) void Tracer::addSignalToTrace(const SignalBase<int> &sig, const string &filename) { dgDEBUGIN(15); + // openFile may throw so it should be called first. + if (namesSet) + openFile(sig, filename); toTraceSignals.push_back(&sig); dgDEBUGF(15, "%p", &sig); names.push_back(filename); - if (namesSet) - openFile(sig, filename); triger.addDependency(sig); dgDEBUGOUT(15); } diff --git a/tests/debug-real-time-tracer.cpp b/tests/debug-real-time-tracer.cpp index 60d8ce0eed2b0a8aaf8df927d633f6c1c7f6151a..b1de9dbdf1d1b0f142be02f996f229695dc8c1c3 100644 --- a/tests/debug-real-time-tracer.cpp +++ b/tests/debug-real-time-tracer.cpp @@ -65,11 +65,16 @@ BOOST_AUTO_TEST_CASE(test_tracer) { std::string basename("my-tracer"); std::string suffix(".dat"); - /// Test openfiles atracer.setBufferSize(1<<14); - atracer.openFiles(rootdir, basename, suffix); - /// Add trace by name + // Check that an exception is thrown if the filename is invalid. + atracer.openFiles(rootdir, "invalid/filename", suffix); + BOOST_CHECK_THROW(atracer.addSignalToTraceByName("my-entity.out_double", "output"), + ExceptionTraces); + + // Test openfiles + atracer.openFiles(rootdir, basename, suffix); + // Add trace by name atracer.addSignalToTraceByName("my-entity.out_double", "output"); /// Add trace by name