mirror of
https://github.com/nasa/trick.git
synced 2024-12-27 16:38:52 +00:00
03d6105c6c
Removed the catches for std:exceptions and unknown exceptions. The best way I found to provide a clue to where the exception comes from is to allow the handler for unhandled exceptions execute. This is std::terminate which calls abort and trips a SIGABRT. I added a signal handler for SIGABRT which like SIGSEGV, we can print a stack trace or attach a debugger to the process before exiting. The stack trace print is on by default. By default the signal handler is on, stack trace is on, debugger is off. refs #220
71 lines
2.1 KiB
C++
71 lines
2.1 KiB
C++
|
|
#include <iostream>
|
|
#include <stdlib.h>
|
|
#include <sys/resource.h>
|
|
|
|
#include "trick/Executive.hh"
|
|
#include "trick/ExecutiveException.hh"
|
|
#include "trick/exec_proto.h"
|
|
|
|
/**
|
|
@details
|
|
-# Set the mode to Initialization
|
|
Requirement [@ref r_exec_mode_0].
|
|
-# Start the cpu usage meter
|
|
-# Call the default_data jobs
|
|
-# Call the initialization jobs.
|
|
-# Record the cpu usage during initialization
|
|
-# The scheduler initializes simulation timers.
|
|
Requirement [@ref r_exec_time_1].
|
|
-# If an exception is caught, print as much error information available based
|
|
on execption type caught and exit.
|
|
-# If no execption is caught return 0
|
|
*/
|
|
int Trick::Executive::init() {
|
|
|
|
double cpu_time ;
|
|
|
|
try {
|
|
|
|
mode = Initialization ;
|
|
|
|
/* Start the cpu usage meter */
|
|
struct rusage cpu_usage_buf ;
|
|
getrusage(RUSAGE_SELF, &cpu_usage_buf);
|
|
cpu_start = ((double) cpu_usage_buf.ru_utime.tv_sec) + ((double) cpu_usage_buf.ru_utime.tv_usec / 1000000.0);
|
|
|
|
call_default_data() ;
|
|
|
|
call_input_processor() ;
|
|
|
|
// If we are starting from a checkpoint, restart_called will be true. Skip init routines in this case.
|
|
if ( ! restart_called ) {
|
|
call_initialization() ;
|
|
}
|
|
|
|
/* Set the initial values for the scheduler times. */
|
|
next_frame_check_tics = software_frame_tics + time_tics ;
|
|
job_call_time_tics = next_frame_check_tics ;
|
|
sim_start = get_sim_time();
|
|
|
|
/* Record the cpu usage for initialization */
|
|
getrusage(RUSAGE_SELF, &cpu_usage_buf);
|
|
cpu_time = ((double) cpu_usage_buf.ru_utime.tv_sec) + ((double) cpu_usage_buf.ru_utime.tv_usec / 1000000.0);
|
|
cpu_init = cpu_time - cpu_start;
|
|
|
|
initialization_complete = true ;
|
|
|
|
/* Print as much error information avaiable for all exception and exit. */
|
|
} catch (Trick::ExecutiveException & ex ) {
|
|
/* Set the exit return code, file name, and error message. Return -1 so we go to shutdown */
|
|
except_return = ex.ret_code ;
|
|
except_file = ex.file ;
|
|
except_message = ex.message ;
|
|
return(-1) ;
|
|
}
|
|
|
|
/* return 0 if there are no errors. */
|
|
return(0) ;
|
|
}
|
|
|