10

私は自分の Ubuntu マシンで喜んでコーディングしています。これは、十分な RAM を備えた強力なマシンです。私は 4 つの新しいクラスに取り組んでおり、単体テストを作成して実行していました。ある時点で、単体テストは問題なく完了しているのに、コード カバレッジがそうではないことに気付きました。

「Generating code coverage report...etc..」というメッセージの後に、zend_mm_heap が壊れているというメッセージが表示されます。output_buffering = Onphp.ini (apache2 と cli の両方) の設定unset()、コードからの呼び出しの削除など、いくつかの修正を試みました。(私はこれらの修正が必要かもしれないので読んだ)。

現在、何をしても zend_mm... エラーとセグメンテーション違反 (コア ダンプ) エラーが交互に表示されるようです。問題の原因と思われるものを絞り込むまでテストをコメントアウトし、クリーンな実行が得られるまでいくつかの変更を加えます。次に、すべてのテストのコメントを外して、その障害がまだ発生していることを確認します。

何か案は?より多くの情報を収集するには、どのツールまたは方法を使用できますか?

PHP_CodeCoverage 1.2.6、PHP 5.3.10-1ubuntu3.5、PHPUnit 3.7.9 を使用しています。

編集:

余談ですが、コアダンプファイルが見つかりません。両方の物理ディスクのルートから検索しましたが、うまくいきませんでした。コア ダンプがファイルを作成しない考えられる理由を含め、コアの man エントリを読みましたが、それらのいずれにも該当しないと思います。

4

3 に答える 3

24

最近同じ問題が発生しました。PHPのガベージコレクションに問題があるようです。phpunitの実行中にガベージコレクションを無効にすると、問題が解決しました。

追加:

zend.enable_gc=0 

php.iniファイルまたはコマンドラインから:

phpunit -d zend.enable_gc=0
于 2013-02-01T01:12:01.753 に答える
3

It's really hard sometimes to understand the Segmentation fault error when running PhpUnit with code coverage. I had segmentation fault on PHP 7.0.5 with 2 versions of PhpUnit.

Finally, after tracking the issue down in my case something like this was causing segmentation fault

$x = doSomething(doSomethingElse());

and extracting internal function to variable like so:

$y = doSomethingElse();
$x = doSomething($y);

solved the issue. This above it's of course simplified code but you should understand sometimes there's no real fault in your code but you should modify this to make PhpUnit with code coverage work for your code.

于 2016-05-30T16:42:40.563 に答える