【问题标题】:Process crashed in debugger; how do I kill it进程在调试器中崩溃;我该如何杀死它
【发布时间】:2012-03-15 22:04:30
【问题描述】:

我有一个 C++ 应用程序,它通过 USB 串行链路连接到微处理器(类似于 Arduino)。我使用termios.h 作为我的串行包装器。

我在 Mac OS X 10.7.3 上使用 cgdb 进行调试。

当我:

  • cgdb build/my-process
  • 设置一些断点等,做一些调试
  • 查找错误,或尝试在cgdb 中使用kill 退出仍在运行的进程

进程挂起。 cgdb 拒绝终止进程 - 只是坐在那里。我相当确定这是因为如果我在应用程序的中途使用kill,我永远不会释放我正在通过它访问微控制器的/dev/ttyUSB 设备。我不确定某些东西是否被锁定并且永远不会解锁,但cgdb 永远不会退出。

我试过了:

  • 基本中断:Ctrl+C
  • ps aux | grep 'my-process',kill -9 [pid]`。
  • ps aux | grep cgdbkill -9 [pid]
  • sudo 以上版本。

没有任何东西会杀死cgdb 或其中运行的进程。

如果我拔下 USB 电缆(终止与微处理器的连接),(我认为这可能会使崩溃的进程崩溃),我开始看到大约 50% 的可用 CPU 正在使用(不确定是什么),并且一切都锁定了。我没有设法使应用程序崩溃。

您如何:(a) 干净地退出 在调试进程的过程中锁定 cgdbgdb 的所有内容,或 (b) 杀死 / 干净地(虽然“干净地”只是锦上添花)停止在您调试时停止的进程 没有 响应 @987654338 @ 没有重启?

【问题讨论】:

    标签: macos gdb cgdb


    【解决方案1】:

    您不能终止处于 I/O 等待状态的进程。从纪元之初起,即使不是所有的 Unix 内核,大多数情况下也是如此。

    这听起来像是一个陷入 I/O 等待的调试器(或任何 ptraceing 另一个进程)也无法被杀死。

    【讨论】:

    • 不,它本质上是一个不间断的状态。摆脱状态的唯一方法是让内核 I/O 操作完成,无论成功与否。
    • 这有点痛 - 谢谢。几天来,我一直在苦苦思索如何杀死这个愚蠢的东西。
    【解决方案2】:

    ptrace 或 pgrep

    我会尝试“pgrep -l cgdb”,非常方便地列出 pid...

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 2013-09-19
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2012-09-20
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多