0

Edit02: 間違った距離が原因でプログラムが何かを 0 で除算するためにフラッシュがクラッシュする理由 - まあ私は自分でエラーを見つけましたが、私の質問はまだ、追加/編集できるクラッシュレポートのようなものはありますか?

編集:ここにあるスクリプトにバグが見つかりました

          if(baseVerticies[vertX]-boneObj.x < 0){
                distance = distance*-1;
            }

ある時点で間違った距離が生成されますが、これはプログラムがクラッシュする原因ではありません。バグを解決する方法は知っていますが、フラッシュクラッシュの理由を検出する機能を追加する方法は興味深いでしょう

OLD: ねえ、私は現在 CS6 Flash デモをテストしていますが、1 つの機能が常にフラッシュを強制終了し、エラー メッセージが表示されないので、私の質問は...どうすればバグを突き止めることができますか?

私が知っている唯一のこと:特定の関数(以下に投稿したもの)を呼び出すとクラッシュします-最初の呼び出しではクラッシュしません... 3番目または2番目のように

エラーを追跡するのに役立つdebugEventsまたは何かを追加する方法はありますか?

事前にt​​hx =)

public function rotateBone(boneObj : Bone, point : Point){
            //rotates the boneGrafik
            boneObj.rotation = (point.x+boneObj.old_rotation)/2;

            if(axis == "horizontal"){
                var firstV : int = selected_bone*(squares+1)*2;
                var lastV : int = selected_bone*(squares+1)*2 + squares*2;
                var radius : Number = Math.sqrt((verticies[lastV]-verticies[firstV])*(verticies[lastV]-verticies[firstV])+
                    (verticies[lastV+1]-verticies[firstV+1])*(verticies[lastV+1]-verticies[firstV+1]));

                //will be exectued for every single vertex
                for(var s = 0; s<=squares; s++){
                    var vertX : int = selected_bone * (squares+1) * 2 + s*2;

                    var distance : Number = Math.sqrt((verticies[vertX]-boneObj.x)*(verticies[vertX]-boneObj.x)+
                        (verticies[vertX+1]-boneObj.y)*(verticies[vertX+1]-boneObj.y));

                    //calculates Vector
                    var rads:Number = boneObj.rotation / 180 * Math.PI;
                    var p:Point = new Point();
                    p.x=Math.cos(rads);
                    p.y=Math.sin(rads);

                    //baseMesh is used in order to check if the vertex pos is positiv / negative
                    if(baseVerticies[vertX]-boneObj.x < 0){
                        distance = distance*-1;
                    }

                    verticies[vertX] =  boneObj.x +  p.x * radius * (distance/radius);
                    verticies[vertX+1] =  boneObj.y +  p.y * radius * (distance/radius);

                }
            }else if (axis == "vertical"){
                for(var r = 0; r<=rows; r++){
                    vertX = r * (squares+1) * 2 + selected_bone * 2;

                }
            }
            updateMesh();
        }
4

1 に答える 1

2

例外なくクラッシュするという意味がわかりません。ブラウザでテストしていますか?その場合は、次のリストから適切な Flash デバッガー プレーヤーをダウンロードしてインストールできます: http://www.adobe.com/support/flashplayer/downloads.html

これにより、FlashPlayer がクラッシュするたびにエラー ウィンドウが表示され、デバッグ情報が含まれます。また、クラッシュとデバッグ データをログ ファイルに書き込みます。詳細については、http: //helpx.adobe.com/flash-player/kb/configure-debugger-version-flash-player.htmlを参照してください。

最後に、処理されない例外をキャッチして処理したい場合は、FP10.1 以降でそれを行うことができます。これに関する Adob​​e ドキュメントは次のとおりです: http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/events/UncaughtErrorEvent.html、そのページのサンプル コードは次のとおりです。

package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.ErrorEvent;
import flash.events.UncaughtErrorEvent;
import flash.net.URLRequest;

public class LoaderUncaughtErrorEventExample extends Sprite
{
    private var ldr:Loader;

    public function LoaderUncaughtErrorEventExample()
    {
        ldr = new Loader();
        ldr.load(new URLRequest("child.swf"));
        ldr.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
    }

    private function uncaughtErrorHandler(event:UncaughtErrorEvent):void
    {
        if (event.error is Error)
        {
            var error:Error = event.error as Error;
            // do something with the error
        }
        else if (event.error is ErrorEvent)
        {
            var errorEvent:ErrorEvent = event.error as ErrorEvent;
            // do something with the error
        }
        else
        {
            // a non-Error, non-ErrorEvent type was thrown and uncaught
        }
    }
}
}
于 2012-08-24T07:24:19.917 に答える