私はLemon Parserを使ってパーサーコードを生成しました。私は生成されたコードをデバッグすることができません。コントロールには、現在実行中のステートメント以外のソースコードがいくつか表示されます。ブレークポイントは移動されます。私はgdbとVisual C++を試しました。両方とも同じ問題があります。それをデバッグする方法を教えてください。パーサーが生成したコードをデバッグする
答えて
lib/dllとしてビルドする場合は、最適化、デバッグ情報のオプションを確認してください。
認定WAG(ワイルド尻が推測される)以下:
は私はパーサジェネレータによって使用されているマクロの全てを見てお勧めしますし、任意のが彼らに改行にをエスケープがあるかどうかを確認します。存在する場合は、それらをすべて削除して(線をつなぎ合わせて)、ファイルを再コンパイルしてください。その後、デバッガのコードを調べました。突然、どこに戻ってしまうのでしょうか。
Backstory:私は80年代にCDBというデバッガを開発し、販売しました。私がU * NXを名前に持つものに移植したとき、私はさまざまなコンパイラの特質や、特定の状況でどのようにデバッグ情報を出したかをよく知っていました。
改行をエスケープしたマクロには、広範な問題がありました。例えば。
#define foo(bar) bar + \
snort + something_else
x = foo(5);
y = 2;
y = 2;
の行番号が 5されている必要があります場合は、多くのシンボルテーブルが6としてそれを示す終わるだろうが、すべてのラインそれがオフ対1になります後。そして、そのようなマクロを使用するたびに、行番号は遠くに、さらに遠くにスローされます。
のは、あなたの入力ファイルがレモンを使用すると、この
#line 1 "myparser.y"
として行が表示されますmyparser.cの内部
をmyparser.cを生成し、myparser.hれる場合にはmylexer.y命名されたとしましょうこれらはline directivesです。それらは、コードを生成するために使用されたファイルにシンタックスエラーをトレースするのに適しています。彼らはデバッグには向いていません。
これらを抑制するには、Lemonを-lオプションで呼び出します。
lemon -l myparser.y
ドキュメントに記載されていないその他のオプションについては、 - ?を参照してください。
lemon -?
- 1. antlrはレクサーを生成しますが、パーサーは生成しません。
- 2. 生成された.NETアセンブリを生成したアプリケーション内からデバッグする
- 3. ReadPパーサーをデバッグする方法は?
- 4. 生成されたC++ Bisonパーサーがリエントラントですか?
- 5. FSYaccスレッドで生成されたパーサーは安全ですか?
- 6. golang yacc生成パーサーの結果にアクセス
- 7. PHPコードがセグメンテーションフォルトを生成します
- 8. VS2015のエラーは、コード生成中に発生しましたが、
- 9. 生成されたコードが見つからないためブレークポイントが無視されるVSCode Chromeのデバッグ
- 10. Antを使用したコード生成
- 11. Verilogコードを生成したフリップフロップの数
- 12. プリプロセッサマクロを使用したコード生成
- 13. org.apache.maven.shared.utils.cli.CommandLineException:systemOutパーサー内でエラーが発生しました
- 14. オプションのパーサーでBoost.Qiコンパイラエラーが発生しました
- 15. 一時ファイルを生成するASPXパーサー/プリコンパイラ
- 16. gsoapでXMLデータを生成してC++コードを生成する
- 17. コード生成 - データベーステーブルを参照してDTOを生成する。
- 18. CppSharpが間違ったコードを生成します
- 19. パーサーを実行しているときにAntlr4エラーが発生しました
- 20. コードを生成するR
- 21. テストデータを生成するためにコード生成を使用する
- 22. javacriptコードのパーサーを書く
- 23. YACCで生成されたパーサーが同じ入力に対して異なる出力を返す
- 24. グラコなしでパーサーを生成することは可能ですか?
- 25. LLVMのllcが間違ったコードを生成する
- 26. コード変更後にVisual Studioのデバッグ情報が再生成されない
- 27. 値を返してデバッグ出力を生成するPowershell関数
- 28. プロテクトされたメモリの例外は、デバッグなしで発生しますが、デバッグなしで発生します。
- 29. テスト容易性を評価するためのC#コードのパーサー?
- 30. Speedmentがコードを生成するカスタムディレクトリを設定します
gdbとは何ですか?.. – ascanio
デバッグ情報でコンパイルしましたか? – crashmstr
はい私はしました..私はメインプログラムを含むファイルを持っています。それはうまくデバッグです。ステップインとステッピングスルー、ブレークポイントはすべて機能しています。コードがパーサーが生成したコードに入ると、制御(カーソル)は別の場所を指し、実行はどこか他の場所で起こります。今私はprintfsでデバッグしています。その非常に退屈な仕事。時々私は関数のためにBPを入れて、私はコードの流れのための呼び出しスタックを参照してください。 – Bharadwaj