うばーぷろぐらみんぐ#2

2013-11-13

BlueStacksを使ってWindows上で快適Androidデバッグ

| 19:30

BlueStacks?というソフトをインストールすると、Windows上でAndroidを動かすことができます(VirtualBoxOSイメージみたいなものかな)。今日はこのBlueStacks?をEclipseADT?を使ってデバッグしてみました。


用意するもの

環境構築手順


  1. BlueStacksをインストール
  2. BlueStacksを起動
  3. ADTとともにインストールされるadb.exeコマンドを使って以下を実行(BlueStacksが起動しているのを確認してください)
adb connect 127.0.0.1

adb.exeの場所は\android-sdk\platform-toolsです。

デバッグ方法


通常の実機デバッグと同じように、デバッグ時に「Androidデバイス選択画面」に「samsung-gt_xxx」のように表示されますので、それを選択してデバッグしてください。

仮想デバイスはもちろん、私の環境では実機よりも高速に動作しています。サクサク!

参考URL

http://infopulseukraine.com/eng/blog/Software-Development/Mobile/Bluestacks_Eclipse/

2013-10-28

IteratorAggregateでSegmentation Fault

| 14:13

methaneのブログ

http://methane.hatenablog.jp/entry/2013/10/27/iterable_%E3%81%A8_iterator

こちらの記事を見て、いろいろ試していたところ、下記のようなコードでSegmentation Faultが発生しました。

(PHP5.4.7/5.5.1で確認。PHP5.2.5だとmemory exhaustedが表示されますが、やっぱり落ちます。)


<?php
class Foo implements IteratorAggregate
{
	public function getIterator()
	{
//		echo "hoge";
		return new Foo();
	}
}

$foo = new Foo();

foreach( $foo as $item ){
//	echo "item:" . $item . PHP_EOL;
}

IteratorAggregate#getIteratorの実装内容ですが、マニュアルの説明には「Iterator あるいは Traversable を実装したオブジェクトインスタンスを返します。 」とあるので、文法エラーにはなりません(IteratorAggregateはTraversableを実装しているため)。

コメント部分を有効にすると、getIterator()が無限に呼び出されていて、最終的にそこで落ちているっぽい。再帰関数の呼び出しオーバーフローならmemory exhaustedとなるはずだが、segmentation errorを吐いてプロセスが落ちる。

PHPバグ