1

配列の要素のメモリ位置を見つけようとしています。関数は基本的にこれです(Cで):

int function(struct MyStruct *s)
{
    char myArray[16];

    printf("\n");
    printf("\n");
    gets(myArray);
    return strcasecmp(s->a,guess);
}

オンラインのGDBガイドによると、「x myArray」、「x myArray [0]」、「p myArray」、「p myArray [0]」を実行して、要素またはメモリの場所を確認できるはずです。関数にブレークポイントを設定してgets(およびgetsブレークポイントまで続行)しましたが、GDBコマンドを試したところ、「そのようなファイルはありません」というメッセージが表示されました。また、「b 15」を使用して配列にブレークポイントを設定し、「b16」を試してみました。しかし、それでも同じエラーが発生しました。なぜこれが起こっているのですか、どうすれば修正できますか?

4

1 に答える 1

3

"break main、break function、break get、break 15(機能しなかった)、break 16(機能しなかった)、run、s(getsブレークポイントに到達するまで)、x myArray、x myArray [0] 、p myArray、p myArray [0] "

あなたはそれを間違っています。

ブレークポイントに到達すると、内部getsで停止します。 gets

そこでは、myArray変数は表示されません-内部functionではなく、内部にありgetsます。

(実装されている場所)のデバッグ情報がないため、どちらのbreak 15内部にもいることはできません。getslibcgets

やりたいことはfinish、のブレークポイントからですgets(これにより、に戻りますfunction)。これで、、、myArrayなどを見ることができるはずですbreak 15

于 2012-04-28T17:44:12.947 に答える