2

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

我正在使用cgdbMac OS X进行调试10.7.3

当我:

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

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

我试过了:

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

没有什么会杀死cgdb或杀死其中运行的进程。

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

你如何:(a)干净地退出而不锁定所有内容,cgdb或者gdb在调试进程的过程中,或者(b)杀死/干净地(虽然“干净地”只是锦上添花)停止一个停止的进程,而您正在调试它没有重新启动就没有响应?kill -9

4

2 回答 2

5

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

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

于 2012-02-25T20:59:54.450 回答
0

ptrace 或 pgrep

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

于 2012-02-27T05:36:57.550 回答