软件卡死的排查流程


本地尝试能否进入终端,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调试

results matching ""

    No results matching ""