私はたくさんのCプリプロセッサ#define
ステートメントを持っています。これは私のCプログラミングをずっと簡単にします。しかし、GDBを使ってデバッグする場合、プリプロセッサの "labels"はシンボルリストに含まれません。GDBにプリプロセッサシンボルを認識させることは可能ですか?
GDBに#define
ラベルを認識させる方法はありますか?
私はたくさんのCプリプロセッサ#define
ステートメントを持っています。これは私のCプログラミングをずっと簡単にします。しかし、GDBを使ってデバッグする場合、プリプロセッサの "labels"はシンボルリストに含まれません。GDBにプリプロセッサシンボルを認識させることは可能ですか?
GDBに#define
ラベルを認識させる方法はありますか?
のように、g3を使ってコンパイルを試すことができます。
gcc -gdwarf-2 -g3
私たちは、コンパイラがデバッグ情報でプリプロセッサマクロについて 情報が含まれて保証するために、2--gdwarfと-g3フラグを渡します。
または-ggdb
を試すことができます。
#define
通常、シンボルはデバッグ情報の一部として含まれません。変数(またはinline functions for function-like macros)が通常より良いアイデアであり、これ以上の理由で(スコープ、型の安全性、複数の評価など)、可能であれば、いつでもプリプロセッサシンボルを使用することをお勧めします。
@EmployedRussian:編集済み。 –
+1は 'const'に有利ですが、私はそれらを' 'const''変数と呼んでいません;) – 0xC0000022L
あなたの答えは' #define'の1種類、つまり定数を定義するものだけを引き継いでいます。他の多くのものが可能である。 '#define min(a、b)((a)<(b))? (a):(b) ' –
'-ggdb'は効果がありません。 [__cxa_finalizeでクラッシュするオブジェクトの解釈について](https://sourceware.org/ml/gdb/2011-08/msg00109.html)を参照してください(JanはGDB開発者の1人です)。 – jww