JMP アクセス違反 - 考えられる原因?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />この質問に答えることができるのであれば、もちろん答えられない可能性もありますが、「JMP はアクセス違反が発生したため、終了します」という致命的なエラー メッセージが表示される原因として考えられるものは何ですか?たとえば、ロックされているテーブルにデータを書き込もうとする試みなどに注意する必要がありますか?
私は何年にもわたってさまざまなスクリプトの演習を行っているときにこの問題に時々遭遇しましたが、その原因を特定することはできませんでした。通常、致命的なエラーが明らかに発生しているスクリプトのブロックをなんとか分離し、それを別の方法で書き直すだけで、問題は解消されます。時間が経つにつれてスクリプトが改善されるにつれて、そのような問題に遭遇することは少なくなりましたが、それでも時々問題が発生します。現在、非常に複雑なスクリプトの途中でその問題を見て、どこから始めればよいのか迷っています。 注意すべき原因や、そのようなエラーを生成する可能性のある疑わしいスクリプト構造はありますか?
どうもありがとう
Re: JMP アクセス違反 - 考えられる原因は?はい、異なる列にすべて混在する必要があるデータ型 (文字、数値など) がある場合、特に大量のデータを扱う場合にこの違反が発生する可能性があることがわかりました。 私の場合、テーブルのいくつかの行がわずかに重なっていたため、その変数名を持つ特定の列にあるはずの数値変数が、文字データ型の列に入っていました。 JMP テクニカル サポートがデータ テーブルのどの行が問題の原因であるかを厳密に特定した後、データ テーブルを注意深く調べた結果、それがわかりました。 当初、彼らはこれがシステムのバグであると想定していましたが、クラッシュ/アクセス違反が発生したときに作業していたデータテーブルの331,670行から始まるいくつかの変数(前述のように)がわずかに重複していたためにそれが起こったことがわかりました。 各変数が同じ列に適切に配置され、各列のデータ型とモデリング タイプが同じであることを慎重に確認することをお勧めします。 つまり、数値変数列に文字変数を含めてはなりません。 郵便番号の場合、文字として数値変数を使用することもありますが。 しかし、あなたはその考えを理解したと思います。 少なくとも私の場合はそれが問題のようです。 元のテキストファイルをリロードしてデータを再度フォーマットするだけで解決しました。
Re: JMP アクセス違反 - 考えられる原因は?ダン、提案してくれてありがとう、私はそれを提出したところです。
Re: JMP アクセス違反 - 考えられる原因は?クラッシュを示すスクリプトをお持ちの場合は、次の宛先に送信してください。 JMPテクニカルサポート。
Re: JMP アクセス違反 - 考えられる原因は?ご報告いただいた問題は将来のリリースで修正されています。これらの問題を発見した場合は、必ずテクニカル サポートに報告してください。私たちはクラッシュをできるだけ早く修正するよう努めており、根本的な問題の回避に役立つことがよくあります。
Re: JMP アクセス違反 - 考えられる原因は?この問題は、最後の数行に数値データを含む列に文字データが含まれるテキスト ファイルの入力に関連していました。 テーブルには 291,000,000 行を超える行があり、わずかに配置が間違っていたデータはデータ テーブルの最後の数 (4) 行にありました。 それらを修正したところ、正常に動作しましたが、再び問題が発生しました。 JMP テクニカル サポートは、問題が発生したと思われる正確な行を提供しましたが、データを再検査した結果、入力テキスト データには、間違ったフィールドにわずかに配置が間違っているデータがいくつか含まれていることがわかりました。
Re: JMP アクセス違反 - 考えられる原因は?ご意見ありがとうございます。 この場合、問題はコードの良し悪しとはまったく関係がなかったと思います。
Re: JMP アクセス違反 - 考えられる原因は?JMP を使用すると、1 行のコードで複数のメッセージを送信できますが、それを行う意味がありません。見苦しく、意味が曖昧で、デバッグが不可能になります。したがって、おそらく JMP のクラッシュは、適切なコードを書くように努めるように私たちに思い出させているだけなのかもしれません。
Re: JMP アクセス違反 - 考えられる原因は?私もこの問題に遭遇しました。私の場合、スクリプト全体が大きなループであり、個別に 20 ~ 30 回実行した後でのみクラッシュするため、原因を検出するのは非常に困難でした。これはスクリプトを可能な限り堅牢にした後のものです。最後に、毎回オブジェクトに言及するとプログラムがクラッシュしないことがわかりました。
例えば:
こんなことはしないでください -
| dt10i << go to( :Event Duration ) << 選択した列を移動( After( “Event Date” ) ) << go to( 2 ) << 列の選択をクリアします。 |
代わりにこれを実行してください:
| dt10i << go to( :Duration ); |
dt10i << 選択した列を移動( After( “Date” ) );
dt10i << go to( 2 );
dt10i << 列の選択をクリア;
この問題が文書化されているのは見つかりませんでしたが、私がこの問題を特定したことは間違いなく、私の場合はそれがプログラムクラッシュの原因でした。
Re: JMP アクセス違反 - 考えられる原因は?アクセス違反は、無効なメモリ操作が発生するたびに発生する可能性があります。特定のパターンを見たのかどうかはわかりませんが、JMP はテーブル操作に対して信じられないほど堅牢なようです。そのため、これはおそらく私が最後に調べる場所ではありません。もちろん、問題の場所を診断するのが難しくて面倒な場合は問題です。私は通常、コードに Throw() を配置して、クラッシュが発生する前に実行を中止しようとします。次に、Throw の位置を移動することで、問題の原因となっているコード領域にホームインすることができます。明らかに愚かなことをしたこともあれば、いくつかの間違いが組み合わさって致命的なことになることもあります。
ここに一例を示します。モーダル ウィンドウは、validate イベントのハンドラーを使用して作成されます。ハンドラーは、「OK」をクリックしたときにウィンドウを閉じるかどうかを示す 1 または 0 を返します。
新しい窓( "テスト" 、 <<モーダル、
<<検証時(
TXT =トリム(テブ<<テキストの取得) ;
もし(長さ( TXT ) > 0 、
有効です= 1
、
有効です= 0
) ;
// 戻る
有効です
) 、
ラインナップボックス( Nコル( 1 ) 、間隔( 10 ) 、
テキストボックス( 「何かを入力してください。ただし、何かを入力してください:」 ) 、
テブ=テキスト編集ボックス( 「」 )
)
)
これは正常に動作し、JMP をクラッシュさせることなく実行できます。関数またはイベント ハンドラーを作成する場合、最後に評価されるのは何が返されるかです (理由については Glue を参照してください)。しかし、ある時点で、JMP は「戻る」ことをより明示的にする Return 関数を導入しました。これは関数では動作しますが、上記のようなイベント ハンドラでは動作しません。したがって、OnValidate の最後の行で isValid を Return(isValid) に置き換えても機能しません。しかし、JMP はクラッシュしません。しかし、誤って OnClose イベントを使用した場合、JMP は不満を抱き、アクセス違反を引き起こします。
// 家ではこれを試さないでください
新しい窓( "テスト" 、 <<モーダル、
<<閉じる時(
TXT =トリム(テブ<<テキストの取得) ;
もし(長さ( TXT ) > 0 、
有効です= 1
、
有効です= 0
) ;
戻る(有効です)
) 、
ラインナップボックス( Nコル( 1 ) 、間隔( 10 ) 、
テキストボックス( 「何かを入力してください。ただし、何かを入力してください:」 ) 、
テブ=テキスト編集ボックス( 「」 )
)
)
Re: JMP アクセス違反 - 考えられる原因は?同じ問題が 1 時間に 2 回発生しました。