利用Linux信号SIGUSR1调试嵌入式程序

本文介绍了如何利用Linux中的SIGUSR1信号来调试嵌入式应用程序。通过自定义信号处理函数,可以在程序运行时控制特定的执行分支,帮助定位和解决问题。在多线程卡死情况下,这种方法也能辅助通过打印日志来检测线程状态。

Linux嵌入式由于诸多的限制,调试方法有限,常常出现面对Bug束手无策的情况,现在介绍一种通过信号处理对Linux嵌入式应用程序进行调试的方法。

linux中一共有32种信号,在/usr/include/bits/signum.h 头文件中可以看到,具体如下:SIGHUP ;SIGINT ;SIGQUIT ;SIGILL ;SIGTRAP ;SIGABRT ;SIGIOT ;SIGBUS ;SIGFPE ;SIGKILL ;SIGUSR1 ;SIGSEGV ;SIGUSR2 ;SIGPIPE ;SIGALRM ;SIGTERM ;SIGSTKFLT ;SIGCLD ;SIGCHLD ;SIGCONT ;SIGSTOP ;SIGTSTP ;SIGTTIN ;SIGTTOU ;SIGURG ;SIGXCPU ;SIGXFSZ ;SIGVTALRM ;SIGPROF ;SIGWINCH ;SIGPOLL ;SIGIO ;SIGPWR ;SIGSYS ;SIGUNUSED

其中SIGUSER1信号用户可以自己定义其处理行为,处理范例如下:

#include <stdio.h>  
#include <signal.h>  
void signal_handle(int sig_num)  
{  
    if(sig_num == SIGUSR1)  
    {  
        printf("Capture SIGUSR1\n");  
    }  
    
CMake Error: Generator: execution of make failed. Make command was: ninja -v -j 12 install && 17:39:15 | WARNING: /home/jenkins/workspace/deploy-AD25APA01-T68_G-image/yocto/build/arago-tmp-default-glibc/work/aarch64-oe-linux/opencv/4.5.5-r0/temp/run.do_install.1180602:186 exit 1 from 'eval ${DESTDIR:+DESTDIR=${DESTDIR} }VERBOSE=1 cmake --build '/home/jenkins/workspace/deploy-AD25APA01-T68_G-image/yocto/build/arago-tmp-default-glibc/work/aarch64-oe-linux/opencv/4.5.5-r0/build' "$@" -- ${EXTRA_OECMAKE_BUILD}' 17:39:15 | WARNING: Backtrace (BB generated script): 17:39:15 | #1: cmake_runcmake_build, /home/jenkins/workspace/deploy-AD25APA01-T68_G-image/yocto/build/arago-tmp-default-glibc/work/aarch64-oe-linux/opencv/4.5.5-r0/temp/run.do_install.1180602, line 186 17:39:15 | #2: cmake_do_install, /home/jenkins/workspace/deploy-AD25APA01-T68_G-image/yocto/build/arago-tmp-default-glibc/work/aarch64-oe-linux/opencv/4.5.5-r0/temp/run.do_install.1180602, line 180 17:39:15 | #3: do_install, /home/jenkins/workspace/deploy-AD25APA01-T68_G-image/yocto/build/arago-tmp-default-glibc/work/aarch64-oe-linux/opencv/4.5.5-r0/temp/run.do_install.1180602, line 161 17:39:15 | #4: main, /home/jenkins/workspace/deploy-AD25APA01-T68_G-image/yocto/build/arago-tmp-default-glibc/work/aarch64-oe-linux/opencv/4.5.5-r0/temp/run.do_install.1180602, line 199 17:39:15 NOTE: recipe opencv-4.5.5-r0: task do_install: Failed 17:39:15 ERROR: Task (/home/jenkins/workspace/deploy-AD25APA01-T68_G-image/yocto/build/../sources/meta-openembedded/meta-oe/recipes-support/opencv/opencv_4.5.5.bb:do_install) failed with exit code '1' 17:39:15 Pseudo log: 17:39:15 path mismatch [3 links]: ino 248682018 db '/home/jenkins/workspace/deploy-AD25APA01-T68_G-image/yocto/build/arago-tmp-default-glibc/work/aarch64-oe-linux/opencv/4.5.5-r0/package/usr/src/debug/opencv/4.5.5-r0/contrib/modules/intensity_transform/src/bimef.cpp' req '/home/jenkins/workspace/deploy-AD25APA01-T68_G-image/yocto/build/arago-tmp-default-glibc/work/aarch64-oe-linux/opencv/4.5.5-r0/contrib/modules/intensity_transform/src/bimef.cpp'. 17:39:15 Setup complete, sending SIGUSR1 to pid 1180603.
最新发布
07-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值