2009-07-16 13 views
0

Apacheで実行されているISAPI Dll(TWebModule)を頻繁にデバッグするときにエラーが発生する箇所があります。エラーボックスのキャプションは "Debugger Fault Notification"で、メッセージにはとりわけ "c:\ program files \ Apache \ bin \ httpd.exeがメッセージでエラーが発生しました......."ApacheでのDelphi ISAPI Dllのデバッグ

これが起こると、CPUウィンドウがポップアップし、エラーメッセージの「OK」ボタンを押す必要があります。私はプログラムの流れが続く前にこれを3〜5回しなければならないかもしれません。

これは私のラップトップで起こっています。私は(私が知る限り)同じ正確な構成のデスクトップを持っており、私はこの問題を抱えていません。どちらのオペレーティングシステムもXPです。だから明らかにどこかの設定や古いファイルがあります。

また、Apacheがデバッグ環境にないときに初めてこのWebサイトを実行すると、この問題が発生していないようです。 (つまり、サービスでApacheを起動し、Webアプリケーションを実行し、サービスを停止し、Delphi環境内でデバッグします)。

+1

@Stijn - コメントではなく答えてください。 – skamradt

+0

ここで唯一の質問は「任意のアイデアですか?何についてのアイデア?あなたはエラーについて何も教えていない。デバッガがポップアップし、エラーメッセージの紹介*を与えてくれたが、何が間違っているのかのヒントを実際に与えてくれる部分ではないことをあなたは教えてくれた。デバッガがプログラムを中断すると、プログラムフローを継続したくない*。むしろ、それは*デバッグを開始するあなたの手掛かりです*。 –

+0

(@skamradt:ありがとう、私は良い答えを出すことはできないと思ったが、M Schenkelの問題を解決できればそれを答えとして提供するほうがよい。) –

答えて

0

Apacheを使用してデバッグする方法に直接答えるわけではありませんが、もう1つの代替デバッグ技法はidDebugger(そのページの最後にあります)を使用することです。サービスを開始/停止することなくIDEからISAPI DLLを直接デバッグすることができます。私は今それなしでISAPI DLLを開発することはありません。

+0

ありがとうございます - 私はこれをチェックします。 ちなみに、私がそれをやっているところでは、Apacheサービスを開始して停止するためにmetを必要としません。私は単にそれをホストアプリケーションとして含めるだけです。 - アンダーラン>パラメータ私は、ホストApplciationのために次のように指定します。 C:\プログラムファイル\ Apache Software Foundationの\ Apache2.2 \ binに\ httpd.exe とパラメータの下で、私はこの次のとおりです。 -X -wを - f "C:¥Program Files¥Apache Software Foundation¥Apache2.2¥conf¥httpd.conf" ありがとうございます - これを確認します。 –

0

これなどの問題を避けるため、xxmを開始しました。これはTWebModuleの代替品で、IISで実行するために別のラッパーを使用しますが、Apache、FireFox、IEラッパーもあります。また、HTML-Delphiソースが混在しており、開発モードのラッパーが解析や自動コンパイルを行い、Webスクリプトのような環境を提供します。

また、InternetExplorerプラグインは、デバッガ(iexplore.exeをホストアプリケーションとして使用)でうまく動作します。

0

エラーコード0xC0000008はStatus_Invalid_Handleです。たとえば、開いていないか、既に閉じられているハンドルを閉じるときに、CloseHandleによってスローされる可能性があります。がデバッグされていない限り、APIが例外をスローしないため、デバッガ外で実行しているときにエラーが発生しないことがあります。

デバッガにアクセスできないコードでその例外が発生している場合、代わりにデバッガにCPUウィンドウが表示されます。呼び出しスタックを見て、例外の発生場所に最も近いコード内の場所を探します。

あなたのコードではまったく発生していない可能性もあります。モジュールがインストールされていない同じデバッグルーチンを試してみてください。それでもエラーは出ますか?

+0

コールスタックを調べると、自分のコールが表示されません。すべてがApache呼び出し(例:libhttpd.dll)のようです。それは私のコードに到達していません。 "モジュールをインストールせずにルーチンをデバッグする方法"私は、confファイル内のLoadModule行をコメントアウトして実行しました。しかし、ISAPIフィルタリングは機能しません(つまり、ハンドラには届かない)。 –

+0

もちろん、あなたがあなたのモジュールを取り外したなら、あなたのハンドラには届かないでしょう。それがポイントです。コードを削除しましたが、まだクラッシュしていたプロセスをデバッグしています。コードなしでもクラッシュしますか? –

+0

その外観からは、Apache自体がクラッシュしているようです。私は自分のコードにアクセスすることさえしません(例えばTWebModule.Create)私が言ったように、同じソースコードを使って別の環境設定を行い、すべてうまく動作します。それは私が問題を抱えているこの1台のコンピュータ上にあります。しかし、Apache環境とは異なるもの、Delphiで古くなったもの、または完全に無関係なものであれば、配置するのは難しいです。 –

関連する問題