繁体   English   中英

进程在调试器中崩溃; 我怎么杀死它

[英]Process crashed in debugger; how do I kill it

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

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

当我:

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

该过程挂起。 cgdb拒绝cgdb该进程-只是坐在那里。 相当肯定,这是因为如果我kill通过应用从半路,我从来没有放开/dev/ttyUSB我通过访问微控制器设备。 我不确定是否有东西被锁定并且从未解锁,但是cgdb永远不会退出。

我试过了:

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

什么都cgdb杀死cgdb或其中运行的进程。

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

您如何: (a)在调试进程的过程中干净退出而不锁定cgdbgdb所有内容, 或者(b)杀死/干净地(尽管“ cleanly”只是锦上添花)停止了一个进程在调试时停止了,如果重新启动就无法 kill -9

您无法杀死正在等待I / O的进程。 从那个时代的曙光开始,对于大多数(如果不是全部)Unix内核都是如此。

听起来像卡在I / O等待中的调试器(或正在ptrace另一个进程的任何进程)也不能被杀死。

ptrace或pgrep

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM