Hatena::Groupsubtech

ういはるかぜの化学

Saturday, April 04, 2009

Mono csharp でプロセスにアタッチ 02:39  Mono csharp でプロセスにアタッチ - ういはるかぜの化学 を含むブックマーク はてなブックマーク -  Mono csharp でプロセスにアタッチ - ういはるかぜの化学

Monoは2.2以降csharp (no title) というC#のインタラクティブなシェルがあります。IronPythonとかIronRubyとかirbとかまあそういうアレC#版です。

で、これ、動いているMonoのプロセスにアタッチできたりもするのです。それがおもしろいです。

普段TwitterIrcGatewayVisual Studio 2008+.NET Frameworkで開発してますが、実際に動作させている環境はFreeBSD 6.4+Mono HEADだったりするのでVisual Studioなどのお世話になったりできません。なので実際動いているプロセスのインスタンスを操作したいというときにこれは役立てそうです。

ということでちょっとアタッチしていじってみたところを動画にしてみたり。ちっこいからリンク先で見た方がいいかも。

http://www.youtube.com/watch?v=H75PCzrZcr8

使ってて思うのは)とかの後ろで改行して;とするとエラーが何とかなるのとTab補完がきいてくれるようになるとうれしいかも。

まあともかく Mono の開発者の d:id:atsushieno さんやNovellの方々には足を向けて眠れません。いつもありがとうございます。

そういえば日本においてTwitterIrcGatewayほどMonoをインストールさせたり潜在的に使わせているアプリケーションは他に知らないのですけど他にあるのかしら。

あとカンニングペーパー(謎)。

アタッチ方法は簡単で操作したい mono のプロセスを調べておいて csharp コマンドのオプションに --attach [PID] を渡すだけです。アタッチしないなら csharp と起動すればおっけー。

using Misuzilla.Applications.TwitterIrcGateway;
using Misuzilla.Applications.TwitterIrcGateway.AddIns;
using Misuzilla.Applications.TwitterIrcGateway.AddIns.Console;

// サーバと接続状況を表示
Server.RunningServers;
Server.RunningServers[0].Sessions;

// セッションを取得
var session = Server.RunningServers[0].Sessions[0];
// サーバメッセージを送ってみる
session.SendTwitterGatewayServerMessage("Hauhau from csharp command");

// Twitterを更新してみる
var status = session.UpdateStatus("Update from csharp command");
status;

// 更新で作成されたステータスをクライアントにも流してみる
var dummy = false;
session.ProcessTimelineStatus(status, ref dummy, true);

// さっきのステータスを削除する
session.TwitterService.DestroyStatus(status.Id);

// ステータス更新時のイベントで更新メッセージにチャンネル名をつけるようにしてみる
session.UpdateStatusRequestReceived += (sender, e) => { e.Text += String.Format(" (Channel:{0})", e.ReceivedMessage.Receiver); };

最初はLINQとかもやってたのですけどメモを間違って消してしまったので。

トラックバック - http://subtech.g.hatena.ne.jp/mayuki/20090404