3

strcmpGDB (gnu v 7.1-ubuntu) で、2 つの文字列が等しいかどうかを判断しようとすると、非常に奇妙な結果が得られます。p strcmp("hello","hello")私に結果を与えてい-145947168ます。

私が試したもの、strcmpまたはgdbstrncmpに戻ってきたものはすべて. -145947168私は何を間違っていますか?

編集(コメント内の関連する回答へのポインタについてCarlに感謝します):この質問への回答を参照してください:GDBで関数を評価する方法は?

どうやら、コンパイラが外部ライブラリから呼び出された関数を最適化する場合があり、GDB でアクセスしたい外部ライブラリの関数を呼び出すコードで関数を定義すると、それが利用可能になります。

これをコードに追加しました:

#ifdef DEBUG
int mystrcmp(char *a, char *b){
        return strcmp(a,b);
}
int mystrncmp(char *a, char *b, int n){
        return strncmp(a,b,n);
}
#endif

-DDEBUG -gそして、gdb デバッグ用にこれらのヘルパー関数をコンパイルできるように再作成しました。

(gdb) p mystrcmp("hello","hello")
$1 = 0
(gdb) p strcmp("hello","hello")
$2 = -145947168
4

0 に答える 0