2

USBシリアルリンクを介してマイクロプロセッサに接続するC++アプリケーションがあります(Arduinoに似ています)。termios.h私はシリアルラッパーとして使用します。

cgdbMac OS X で使用してデバッグしてい10.7.3ます。

私がいつ:

  • cgdb build/my-process
  • いくつかのブレークポイントなどを設定し、デバッグを行います
  • バグを見つけるか、insideを使用してまだ実行中のプロセスを終了してみてくださいkillcgdb

プロセスがハングします。cgdbプロセスを強制終了することを拒否します-ただそこに座っています。これは、アプリケーションの途中から、マイクロコントローラーにアクセスしているデバイスを決して解放しないためです。何かがロックされてロックが解除されないかどうかはわかりませんが、終了することはありません。kill/dev/ttyUSBcgdb

私はもう試した:

  • 基本割り込み: Ctrl+C
  • ps aux | grep 'my-process',kill -9 [pid]`.
  • ps aux | grep cgdbkill -9 [pid]
  • sudo上記のバージョン。

どちらかcgdb、またはその中で実行されているプロセスを強制終了するものはありません。

USB ケーブル (マイクロプロセッサへの接続を終了) を取り外すと (クラッシュしたプロセスがクラッシュする可能性があると思いました)、使用可能な CPU が 50% まで使用されているのが見え始め (何が原因かわかりません)、すべてがロックされます。アプリケーションをクラッシュさせることはできません。

( a) プロセスのデバッグ中またはデバッグ中にすべてをロックせずに正常に終了するか、または (b)プロセスを完全に (「完全に」とはケーキのアイシングに過ぎませんが) 停止している間に停止したプロセスを停止します。再起動せずに応答しないデバッグをしていますか?cgdbgdbkill -9

4

2 に答える 2

5

I/O 待機中のプロセスを強制終了することはできません。これは、時代の黎明期から、すべてではないにしてもほとんどの Unix カーネルに当てはまります。

I / O待機でスタックしているデバッガー(またはptrace別のプロセス)も強制終了できないようです。

于 2012-02-25T20:59:54.450 に答える
0

ptraceまたはpgrep

pidを一覧表示するのに非常に便利な「pgrep-lcgdb」を試してみます...

于 2012-02-27T05:36:57.550 に答える