1

私はS390xのGDBで作業しています

私は本質的にこれを行う関数を持っています:

Item *getItemFromRef( PrimaryDataStructure pds, size_t ref ) {
    Item *returnValue = NULL;
    SecondaryDataStructure sds = getSecondaryFromPrimary(pds, ref)
    if (sds) {
        returnValue = getItemFromRefSecondary(sds, ref);
    }
    return returnValue;
}

getItemFromRefとにブレークポイントを設定しましたgetItemFromRefSecondarygetItemFromRefブレークポイントは正常に起動しますが、起動することはありgetItemFromRefSecondaryません。これは期待されていますか?それを発火させる方法はありますか?私は何が間違っているのですか?この動作は、のブレークポイントを無効にしても発生しますgetItemFromRef

編集:gdb6.8.50を使用

4

2 に答える 2

1

今日、シンボルをもう一度調べたところ、2つの異なるダイナミックライブラリが同じ関数シンボルをインポートしており、ブレークポイントが関数の間違ったバージョンに設定されていることがわかりました。

于 2012-09-27T20:16:33.497 に答える
0

getItemFromRefSecondaryその時点でインライン化された可能性はありますか?ステップインするとインライン化された関数名が報告される場合がありますが (デバッグ情報のため)、デバッガーはそれが本当に関数呼び出しである場合にのみ中断できます。

最適化を減らして (またはなしで を使用して) コンパイルする-O0か、それが邪魔すぎる場合は、関数を強制的にインライン化しないようにすることができます__attribute__((__noinline__))( を使用してビルドすると仮定しますgcc)。

于 2012-09-26T23:35:56.920 に答える