株式会社クリアコード > ククログ

ククログ

«RubyKaigi 2015:The history of testing framework in Ruby #rubykaigi 最新 Thunderbirdのエラーコンソールの出力結果を効率よく収集する方法»
タグ:

Firefoxを意図的にクラッシュさせる方法

Firefoxの導入時の要件として、クラッシュ時のレポートを送信しないようにするという設定を行う事があります。 この設定が意図通りに反映されているかどうかを確認するために、Firefoxが実際にクラッシュした時の様子を観察したい場合があります。

Firefoxには既知で且つ未修正のクラッシュバグがいくつかあるため、それを突くようなコードを実行すればFirefoxをクラッシュさせる事ができます。 しかし、クラッシュバグは再現性が低い物もありますし、そもそも新しいバージョンのFirefoxではクラッシュしないように修正されていることも多いです。 安定してFirefoxをクラッシュさせる方法を把握しておけば、Firefoxをクラッシュさせるための方法をその都度あれこれ調べなくても済みます。

Firefoxにはjs-ctypesという、JavaScriptからC言語製の共有ライブラリの機能を直接呼び出す機能が含まれており、これを使えば、比較的簡単にFirefoxをクラッシュさせられます。 例えば以下のようなコードを実行すれば、使用中のメモリ領域を強制的に解放してメモリ破壊を引き起こし、Firefoxをクラッシュさせる事ができます。

(function(){
Components.utils.import('resource://gre/modules/ctypes.jsm');
// Firefoxの構成ファイルの1つであるnss3.dll(nss3.so)をオープンする。
var library = ctypes.open(ctypes.libraryName('nss3'));
// 指定したアドレスのメモリを解放する関数を取得する。
var PR_Free = library.declare(
  'PR_Free',
  ctypes.default_abi,
  ctypes.void_t,
  ctypes.voidptr_t
);
// 適当なアドレスを指定してメモリを解放する。
var ptr = new ctypes.voidptr_t(1);
PR_Free(ptr);
})();

上記のスクリプトを実行するには、js-ctypesを利用する権限(chrome権限)が必要です。 「スクラッチパッド」を使って実行する場合は以下の手順となります。

  1. Firefoxを起動する。
  2. about:configを開き、devtools.chrome.enabledの値をtrueに設定する。
  3. Shift-F4を押すか、「開発ツール」メニューから「スクラッチパッド」を選択してスクラッチパッドを起動する。
  4. 「実行環境」メニューから「ブラウザ」を選択する。
  5. 上記のスクリプトを貼り付けて、ツールバー上の「実行」をクリックする。

なお、メモリ破壊を引き起こしてFirefoxをクラッシュさせると履歴や設定などのデータが破損する場合があります。 この方法を実際に試す際は、データが壊れてもよいテスト用のプロファイルを使う事を強くお勧めします。

つづき: 2016-01-06
タグ: Mozilla
2015-12-14

«RubyKaigi 2015:The history of testing framework in Ruby #rubykaigi 最新 Thunderbirdのエラーコンソールの出力結果を効率よく収集する方法»
2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|
タグ:
RubyKaigi 2015 sponsor RubyKaigi 2015 speaker RubyKaigi 2015 committer RubyKaigi 2014 official-sponsor RubyKaigi 2014 speaker RubyKaigi 2014 committer RubyKaigi 2013 OfficialSponsor RubyKaigi 2013 Speaker RubyKaigi 2013 Committer SapporoRubyKaigi 2012 OfficialSponsor SapporoRubyKaigi 2012 Speaker RubyKaigi2010 Sponsor RubyKaigi2010 Speaker RubyKaigi2010 Committer badge_speaker.gif RubyKaigi2010 Sponsor RubyKaigi2010 Speaker RubyKaigi2010 Committer
SapporoRubyKaigi02Sponsor
SapporoRubyKaigi02Speaker
RubyKaigi2009Sponsor
RubyKaigi2009Speaker
RubyKaigi2008Speaker