35199


byebugのおかげでrubyのデバッグがずっと捗るようになったのですが、外部ツール(検索エンジンなどのミドルウェア等)との連携をするようなプログラムを作っていると、特にcucumberなどの自動テストと組み合わせるときに、そういった外部ツールをテストシナリオの実行中に、臨時に再起動したい必要に迫られることがあり、その対応方法がわかりません。

byebugではプログラム実行中に`restart`コマンドを実行することでプログラムの再起動させる手間短縮できるのがGDBみたいで素晴らしく、自動テストをしながらすぐにやり直せるのがとても重宝しています。  
ですが、その再起動を検知してコールバックされるフック処理を使えないと、再起動の必要な外部ツールがあるときに、それらのツールを初期化ができなくて困っています。

フックがなかったからといって不具合とは思いませんが、まずはそういう機能がbyebugに備わっているのが知りたいです。代替案含めて一応調べてはみたのですがわかりませんでした。  
at_exitメソッドをテストコードに入れていると、タイミング次第ではうまく動くこともありますが、とても不安定です（プログラム次第なのかも）。

こうした次第ですので、byebugにフックの機能があるのをご存じの方がいらしたら教えていただけないでしょうか。  
よろしくお願いします。


CC BY-SA 3.0
2017-05-27T05:17:41.710
35062
2017-08-06T01:40:37.933
2017-08-06T01:40:37.933
19110
9403
question
ruby debugging
byebugで"restart"コマンドを実行した時に、それをフックする方法はあるでしょうか


自己解決しました。  
[byebug自身の説明](https://github.com/deivid-
rodriguez/byebug/blob/master/GUIDE.md)を読んだ限りではこうした処理に関して特に記述はなく、その代わり、`restart`
に引数を付けてアプリケーションを再起動することが可能との記述がありました。

> Restarting Byebug
>
> You can restart the program using restart [program args]. This is a  
>  re-exec - all byebug state is lost. If command arguments are passed,  
>  those are used. Otherwise program arguments from the last invocation  
>  are used.

これにより、cucumberなどでの実行時に特定の引数を渡すことで、外部依存環境のリセットをしてからテストの再実行を行わせるといった操作が一応は可能だとわかりました。詳しい実装については工夫次第ですので、これで解決としたいと思います


CC BY-SA 3.0
2017-06-01T20:43:34.263
35199
2017-06-01T20:43:34.263
9403
35062
answer