2011-07-21 3 views
12

ソースコードがないプログラムをデバッグしようとしていますが、std :: stringに格納されているものを調べる必要があります。私はここでグーグルして見てきましたが、STLコンテナの出力に関するいくつかの情報を見つけましたが、そのすべては変数を参照しています。ソースデータやデバッグ情報はクラスデータのメモリオフセットです。これを行う方法はありますか?ソースコードなしでGDBのstd :: stringを調べるには?

答えて

22

すべてstd::stringの実装には、どこかの生の文字へのポインタがあります。 g++ 4.xの場合、そのポインタは文字列のオフセット0にあります。

文字列が、 0x7fffffffda88、次に

print *(char**)0x7fffffffda88 

が必要です。

+0

働いていたこと、ありがとうございます。私が知りたいことの一つは、自分のようなものをどうやって見つけ出すかということです。クラス 'X'のソースコードが与えられていると、そのクラス内のフィールドの位置をどのように把握できますか?私が現時点で考えることができる唯一の方法は、自分のテストアプリケーションをコンパイルし、私が与えたポインタ(offsetofなど)を調べることです。 – PeterBelm

+1

オフセットを調べる最も速い方法は、実際にはデバッグモードで与えられたクラスを使って簡単なテストプログラムをコンパイルし、GDBのオフセットとクラスレイアウトを調べることです。これはまさにあなたの質問に答えるために私が行ったことです;-) –

+2

SSOがclangのlibC++のように使われている場合、小さな文字列のポインタはありません。 ;-) – Deduplicator

5

おそらく最も簡単なオプションは、のように、c_str方法を使用することです:

print myStr.c_str() 
関連する問題