managed/unmanaged C++

仕事で書いてるプログラム、基本的に私が全部の設計をやるから好き勝手やってるんですけど、もともとC言語しか使わないところでメンテできるようにしておかないといけないので、一応C++で書いてたんですね。C言語の(extern "C"な)DLLを使うってのもあるんですけど。

でもUIを書くのがあまりにもめんどくさかったので、ひっそりとC#(というか.NET)のクラスライブラリを混ぜたくなっていろいろやってみた。
ら。
ウォッチウィンドウなんかではunmanaged(CLI使わない)状態では親クラスにキャストしてあってもクラス本来の型のデータも全部丸見えだったのに、managed(CLI使う)状態では見えなくなっていきなりかなり不便に。
C++ではchar*で持ってる文字列をC#ライブラリに渡すにはString::Stringにキャストしてから渡さなければならないのがめんどくさいとか、戻り値はさらにめんどくさいとか細かく気になる。
それでも我慢してやってたら、unmanagedクラスのメンバーとしてmanagedクラスを持てないとか言い出したり。まぁこれは設計でどうにでもなる(Singletonパターンの応用で)からいいんだけど。

どうしても我慢できないのが、managedにしてからどうにもデバッガがデッドロックするようになった気がする。たとえば、ヌル参照とかで例外吐いたとき、今まではさくっと落ちてたのにmanaged環境では例外のウィンドウを出すのに一分ぐらいかかったりとか、あるいはそのまま応答なしになって強制終了するしかなくなったりとか、強制終了するにもタスクマネージャーすら起動しないような有様。とくにスレッドをいくつか動かしてるとその兆候が激しくて、正直デバッグできないです。何がひどいってディスクアクセスなしのCPU使用率2%なのに何の操作も受け付けなくなる(正確には1挙動十分ぐらいかかるようなる)ところ。いらいらする。