mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-02 20:28:37 +08:00
posix main add SIGSEGV handler
This commit is contained in:
committed by
Lorenz Meier
parent
5234ba49ad
commit
3e843ba2d2
Vendored
+6
@@ -300,6 +300,12 @@ pipeline {
|
|||||||
}
|
}
|
||||||
sh 'make distclean'
|
sh 'make distclean'
|
||||||
}
|
}
|
||||||
|
post {
|
||||||
|
failure {
|
||||||
|
sh('find . -name core')
|
||||||
|
sh('gdb --batch --quiet -ex "thread apply all bt full" -ex "quit" build/posix_sitl_default/px4 core')
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('check stack') {
|
stage('check stack') {
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ extern "C" {
|
|||||||
cout.flush();
|
cout.flush();
|
||||||
_ExitFlag = true;
|
_ExitFlag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _SigFpeHandler(int sig_num);
|
void _SigFpeHandler(int sig_num);
|
||||||
void _SigFpeHandler(int sig_num)
|
void _SigFpeHandler(int sig_num)
|
||||||
{
|
{
|
||||||
@@ -91,6 +92,15 @@ extern "C" {
|
|||||||
PX4_BACKTRACE();
|
PX4_BACKTRACE();
|
||||||
cout.flush();
|
cout.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _SigSegvHandler(int sig_num);
|
||||||
|
void _SigSegvHandler(int sig_num)
|
||||||
|
{
|
||||||
|
cout.flush();
|
||||||
|
cout << endl << "segmentation fault" << endl;
|
||||||
|
PX4_BACKTRACE();
|
||||||
|
cout.flush();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool fileExists(const string &name)
|
static inline bool fileExists(const string &name)
|
||||||
@@ -299,20 +309,24 @@ int main(int argc, char **argv)
|
|||||||
tcgetattr(0, &orig_term);
|
tcgetattr(0, &orig_term);
|
||||||
atexit(restore_term);
|
atexit(restore_term);
|
||||||
|
|
||||||
struct sigaction sig_int;
|
// SIGINT
|
||||||
memset(&sig_int, 0, sizeof(struct sigaction));
|
struct sigaction sig_int {};
|
||||||
sig_int.sa_handler = _SigIntHandler;
|
sig_int.sa_handler = _SigIntHandler;
|
||||||
sig_int.sa_flags = 0;// not SA_RESTART!;
|
sig_int.sa_flags = 0;// not SA_RESTART!;
|
||||||
|
sigaction(SIGINT, &sig_int, nullptr);
|
||||||
|
|
||||||
struct sigaction sig_fpe;
|
// SIGFPE
|
||||||
memset(&sig_fpe, 0, sizeof(struct sigaction));
|
struct sigaction sig_fpe {};
|
||||||
sig_fpe.sa_handler = _SigFpeHandler;
|
sig_fpe.sa_handler = _SigFpeHandler;
|
||||||
sig_fpe.sa_flags = 0;// not SA_RESTART!;
|
sig_fpe.sa_flags = 0;// not SA_RESTART!;
|
||||||
|
|
||||||
sigaction(SIGINT, &sig_int, nullptr);
|
|
||||||
//sigaction(SIGTERM, &sig_int, NULL);
|
|
||||||
sigaction(SIGFPE, &sig_fpe, nullptr);
|
sigaction(SIGFPE, &sig_fpe, nullptr);
|
||||||
|
|
||||||
|
// SIGSEGV
|
||||||
|
struct sigaction sig_segv {};
|
||||||
|
sig_segv.sa_handler = _SigSegvHandler;
|
||||||
|
sig_segv.sa_flags = SA_RESTART | SA_SIGINFO;
|
||||||
|
sigaction(SIGSEGV, &sig_segv, nullptr);
|
||||||
|
|
||||||
set_cpu_scaling();
|
set_cpu_scaling();
|
||||||
|
|
||||||
int index = 1;
|
int index = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user