2011-10-28 12 views
2

DirectShowフィルタをデバッグしています.DELIUS 6 Proを使用してDSPACKコードライブラリで作成しました。私が設定したブレークポイントがBaseClass.pasという名前の特定のユニットでヒットし、トレースを開始すると、実行ポイントはソースコードの奇妙な場所にジャンプします。これは通常、トレースされているソースコードが、Delphiアプリケーションで使用されているパッケージの1つにコンパイルされたソースコードと一致しないことを示します。奇妙なことに、私はDSPACKコードライブラリに属する​​他のユニットをトレースしているので、この問題は発生していないので、BaseClassユニットだけです。私はランタイムパッケージを使用していません。ブレークポイントがヒットしたときに、ユニットソースコードがコード実行パスと一致しない

私は自分のディスクをスキャンし、プログラムをビルドした最後の日と同じ変更日を持つBaseClass.dcuのコピーを1つだけ見つけました。私は、そのユニットまたはDSPACKに所属する他のユニットのソースを変更していません。私のフィルタはメインアプリケーションの一部であるため、これはDSPACKコンポーネントパッケージ(dpk)を構築するために使用され、またTBCSourceオブジェクトを介してメインアプリケーションから直接参照されるため、BaseClass.pasはデュアルユースの対象となることを示しています私のフィルターはから降ります。注:私はプロジェクトに直接ユニットPASファイルを追加しようとしましたが、何も修正されませんでした。

また、DSPACKパッケージファイルをそれぞれ再オープンして、完全に再ビルドしました。これのどれも助けられませんでした。 BaseClassユニットのコンパイルされたイメージと同期させるために何か他のものがありますか?それとも、別の問題なのでしょうか?そうであれば、それは何ですか?どうすれば修正できますか?

答えて

3

時にはコードがWebページや他のソースから貼り付け/コピーされたときにこの問題が発生し、行は(Windowsの標準#13#10または0x0D0A、)CR/LFペアで終了しますが、一般的に、(唯一のLFに#10または0x0Aを終了しません* nixシステムで終わる行)またはCR(#13または0x0D、典型的にはMac OSX/iOS)。間違った行終端文字はデバッガを混乱させます - これは過去のいくつかのDelphiのバージョンでは問題でした。

メモ帳などのテキストエディタを使用してソースファイルを開いて、意味のない小さな変更(たとえば、空白行を挿入してから削除する)を行ってファイルを保存することで、修正することがあります。

+1

それについて私に思い出させてくれてありがとう。私はあなたの提案を残しておきましたが、残念ながら変更はありませんでした。 –

+0

Delphiの*すべての迷惑メールファイルをきれいにし、すべての行末の文字が真のCRLFペアであることを保証するために、私はずっと前からユーティリティを書いていたことを思い出しました。私はそれを見つけてBaseClass.pasで実行し、エラーは消えました。だからメモ帳のセーブ/リロードは明らかにいくつかの状況では不十分ですが、それは迷惑な文字の問題でした。この悲しいことに数時間を忘れましたが、それは修正されて嬉しいです。 –

+1

:)そういうわけで私は「時々」と言いました。「あなたは修正できる」だけではありません。たとえ少しでも助けてくれてうれしいです。 –

1

再ビルド時に、「デバッグ情報」がオンになっていることをプロジェクトのコンパイラオプションで確認してください。実際、デバッグのオプションのほとんどは、プロジェクトのコンパイラオプションで設定する必要があります。

まだお持ちでない場合は、Delphiを再起動してください。

+0

良いアイデアだが、私はもう一度チェックして、デバッグ情報は確かに上にある。 –

4

私は同じ問題を抱えており、同様の有用性を示しました。修正しました。 基本的には、ちょうどこの:

これが起こることができ、別の方法があり
procedure adjustCRLF(filename : String); 
var 
    strList : TStringList; 
begin 
    strList := TStringList.Create; 
try 
    strList.LoadFromFile(filename); 
    strList.Text := AdjustLineBreaks(strList.Text); 
    strList.SaveToFile(filename); 
finally 
    strList.Free; 
end; 
end; 
+0

ファイルを保存するときにエディタが自動的に行末を消去する必要があります! – Shannon

1

:IDEが誤って同じ名前を持つ他のソースファイルを開きます(しかし異なる、以前のバージョンなど)をすべてのデバッグポイントがなる場合は、間違っていると、デバッガは、間違ったファイルをステップ実行することさえ許可します。 私はDelphi 7がこれを一度行ったのを見ました。

関連する問題