C コードのデバッグには、多くの場合、データ構造の内容の検査が含まれます。これは、C ベクトルのような複雑な構造を扱う場合に特に困難になります。これに対処するために、この記事では std::vector
まず、ベクトル要素を格納する内部配列へのポインタを特定します。 GCC 4.1.2 では、このポインターは式 myVector._M_impl._M_start を通じてアクセスできます。
ベクトル全体を出力するには、次の GDB コマンドを使用します。
print *(myVector._M_impl._M_start)@myVector.size()
このコマンドは、ベクトルの要素。アドレス myVector._M_impl._M_start から始まり、myVector.size() 要素まで続きます。
ベクトルの最初の N 要素のみを出力するには、コマンドを次のように変更します。
print *(myVector._M_impl._M_start)@N
このコマンドは、ベクトルの最初の N 要素を出力します。
説明:
これらのコマンドは、ベクトルの実装方法を利用するために機能します。 GCC 4.1.2 では。内部配列はベクターの _M_impl._M_start フィールドに保存され、GDB の print P@N コマンドを使用すると、ポインター P から始まる配列の N 要素を出力できます。
ショートカット:
GDB 初期化ファイル (.gdbinit) にショートカットを作成して、デバッグ プロセスを簡素化することもできます。次の行を .gdbinit ファイルに追加します。
define p P@N
これにより、print P@N コマンドのエイリアスが作成され、p を使用して配列要素をより簡単に印刷できるようになります。
以上がGDB で C `std::vector` の内容を出力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。