ホームページ  >  記事  >  バックエンド開発  >  GDB で C `std::vector` の内容を出力するにはどうすればよいですか?

GDB で C `std::vector` の内容を出力するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-30 03:55:28674ブラウズ

How to Print the Contents of a C   `std::vector` in GDB?

C ベクトルの GDB デバッグ

C コードのデバッグには、多くの場合、データ構造の内容の検査が含まれます。これは、C ベクトルのような複雑な構造を扱う場合に特に困難になります。これに対処するために、この記事では std::vector の要素を出力する方法を検討します。 GDB 内。

まず、ベクトル要素を格納する内部配列へのポインタを特定します。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。