-6

たとえば、私はページを持っています。このページをエラーなしで100回ロードできます。ただし、onErrorメソッドでColdFusionから送信された電子メールを受け取ったために、誰かがエラーを受け取ることがあります。あまり手に入らないのですが、思った以上に手に入れます。「デバッグ」は常に行われるわけではないため、不可能です。1日に1回、特定のページに表示される場合があります。

誰かが似たようなものを見たことがありますか。

1つの例:

if((StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code')) == 0) return '<a #class# #target# #linkid# #pageid# href="#url#">#title##fileext#</a>';
    else return '<a class="youtube_video" #target# #linkid# href="http://www.youtube.com/v/#itm.video_code#?version=3&autoplay=1&rel=0&modestbranding=1">#title#</a>';

このページリクエストでは、アイテム構造体にvideo_codeが含まれていました。しかし、2行目が処理されたとき、video_codeは未定義でした。ページをさらに100回実行できますが、これは発生しません。

objectType  class coldfusion.runtime.Struct
element VIDEO_CODE
Resolvedname    ITM
Detail  
ErrNumber   0
Message Element VIDEO_CODE is undefined in ITM.
Type    Expression
Trace:  Template    Line
D:\www\websites\assets\cfcs\menu.cfc    240
D:\www\websites\assets\cfcs\menu.cfc    209
D:\www\websites\assets\cfcs\menu.cfc    15
D:\www\websites\assets\templates\distance_general\campus_index_page.cfm 120
D:\www\websites\domain.com\index.cfm    1
4

2 に答える 2

5

これはコードのバグです。

これは、ほとんどの場合、誰かがあなたのような質問をしたときの標準的な自動応答です。

もちろん、ColdFusionの欠陥を特定した可能性はありますが、確立された製品のバグを見つける確率は 、特定のコード/構成のエラーである確率よりも大幅に低くなります。

例として提供されている複雑なコードを考えると、おそらくコードのバグである可能性が非常に高くなります。

プログラミング言語は時々誤解析する可能性があります。

単純に、いいえ。パーサーの動作を変えるような解析レベルの構造はなく、解析は1回実行された後、同じコンパイル済みコードが使用されます(クリアされるかサーバーが再起動されるまで)。

なぜこれは100回失敗せず、1回失敗しないのでしょうか。

例をもう一度見ると、スコーピングの問題である可能性があります。StructKeyExistsをチェックしていますが、コードでARGUMENTS.itm単純itmに使用しています。ColdFusionには、スコープ外の変数に関するスレッドの問題があり、高負荷時に発生する可能性があります。

varscoperを使用して、スコープ外の変数をチェックします。

于 2013-01-15T17:44:10.970 に答える
2

これはコードの実際のバグです。if条件は次のとおりです。

(StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code')) == 0

これは、else条件が次のとおりであることを意味します。

(StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code'))

したがって、else句は、ARGUMENTS.itm.video_code存在して空でない場合、または存在しない場合に実行されます。後者の場合、itm.video_code2行目のへの参照は失敗します。

エラーが断続的に発生する理由を説明できません。引数が存在しないことがある理由を確認するには、さまざまな呼び出し元を調べる必要があると思います。

于 2013-01-15T18:10:28.973 に答える