Appearance
软件卡死的排查流程
本地尝试能否进入终端,Ctrl+Alt+F1
进入终端,用户名 root
,密码 bestcobot
,退出终端 Ctrl+Alt+F7
远程通过 ssh
登陆到目标设备,密码 bestcobot
1. 界面弹窗焦点冲突
状况 1:UI 界面卡住不动,且界面变为灰黑色。
原因:UI 界面卡死。
解决方案:无需特殊操作,等待约 15 秒左右,示教器会自动结束运行并重启。
状况 2:UI 界面长时间卡住不动,且界面未变为灰黑色。
原因:由于焦点冲突问题导致界面无法操作。通常在存在大量弹窗的情况下会出现此问题。
解决方案:控制柜插入键盘,按【Alt】+【Tab】进行查看或切换弹窗界面。如果仍未能解决问题,则需要断电重启系统。
2. top/htop指令
用途:性能分析工具,能够实时显示系统中各个进程的资源占用状况
top
运行结果可以大致分为7个部分:
- 第1行显示了系统概况
- 第2行显示了进程概况
- 第3行显示了CPU概况
- 第4行显示了内存概况
- 第5行显示了Swap分区概况
- 第6行为空行,用以显示运行命令时输入的参数
- 剩下部分则为每个进程的详细信息
htop -p `pgrep aubo_scope`
htop -p `pgrep aubo_control`
3. strace指令
用途:strace命令是一个集诊断、调试、统计与一体的工具,可用来追踪调试程序
使用举例: 假设现在 aubo_control
运行后的cpu占用率为100%,过了一会儿后cpu占用率又恢复正常了,在执行 strace -c -p
命令以后,等到你关注的时间到了后,按 Ctrl + c
退出,strace会列出如下的相关信息
strace -c -p `pgrep aubo_control`
- -c: 计算每个系统调用的时间、调用和错误,并报告摘要
- -p: 具有进程id PID的跟踪进程,可以重复
在上面截图中,程序花了绝大部分时间在等待 select()
,每次的 select()
里都调用了 getppid()
和 time()
,这是一种典型的事件循环。
4. gdb指令
用途:查看程序的堆栈信息
gdb常用指令:
gdb -p `pgrep aubo_control`
- l: 显示源代码
- bt: 查看堆栈信息
- i: 查看信息
- n: 执行下条语句
- r: 运行程序
- p: 打印变量值,如p sum 打印变量sum的值
- q: 退出gdb调试