ものがたり(旧)

atsushieno.hatenablog.com に続く

debugging (with) mono

リクエストが届いたので書いてみる。(いつぞやのmono meetingの時にも言及した記憶がありますが、ここのアーカイブには書いていないみたい。)

基本は mono --debug, mono --trace, そしてConsole.WriteLine()です(!)

もうちょっと正確に書くと、Console.WriteLine()が使える場面(ほとんどの場合)はコレでやります。デバッガ(mdb)も簡単なアプリケーションであれば使ってる人は居ます(がgdb使うようなもんだし、あんまし便利ではない)。僕は99.9999%コレで終わり。

P/Invokeがあったりするとgdbでランタイムごとデバッグしちゃったりします。Gtk#アプリの開発者はこれがけっこう多いかな。ランタイムハッカーは特に、gdb,valgrindはフツーに使っています(monogrindというスクリプトがどこかにあるはず)。要するにmonoを単なるELFバイナリとしか見ていないわけですね。

ちなみにSystem.Consoleを使うにはいくつかの依存コンポーネントがあるので(たとえばSystem.IO.StreamとかSystem.Text.EncodingとかSystem.Globalization.CompareInfoとか)、それらをテストしたい時にはgdbやmono --traceなどに頼るしかありません。

簡単なコマンドラインツール程度なら、debugger (mdb)を使うこともできるはずですが、どうせそのうちMonoDevelopに統合されるでしょう…と思い続けてはやx年(w 

MonoDevelop debugger integrationは今年のSummer of Codeのネタのひとつです。去年も提案されたんだけど、debuggerを根本的に直さないといかん、っていう話があって時期尚早ということで流れたんだよねぇ…