2016-04-07 12 views
1

に対応してどのようなメモリアドレスを見つけるためにGDBを使用した私は、この基本的なプログラムがあります。機能が/デバッグ

int initfunc(int *array, int len) { 
    int i; 
    for(i=1; i <= len; i++) { 
    array[i] = i; 
    } 
return 0; 
} 

int main(int argc, char* argv[]){ 

    int* myarray=0; 
    initfunc(myarray,10); 
} 

まず私はGDBにおけるコマンドは、メモリアドレスメインが格納されているものを見つけるために何を把握しようとしています

また、私のエラーは4行目(array [i] = i)です。実行するために何が必要なのか把握しようとしています。私の教授がこのプログラムを書いたので、これらのポインタを使っても基本的なプログラムをコーディングするのは良い方法ではないでしょう。私はちょっとした洞察力が必要です。私は指針でそれほど偉大ではないからです。

+0

デバッグシンボルをオンにしてコンパイルすると、gdbはそれをボックスの外に表示します。 –

+0

@EugeneSh。 、あなたは正しい友達です。もしGDBが私にそのエラーが何であるかを教えてくれると言ったら、それは4行目だと分かっているからです。ポインタはそれを投げ捨てる理由は私の前提です。しかし、GDBが私に偽の関数のメモリアドレスを教えてくれると言っているのであれば、私は必要なものではないエラーを返す関数のメモリアドレスを知らせるので、メモリが必要です特定の機能のアドレス。 –

+1

関数のアドレスではなく、 'array'の値(ポイントを指す)を調べたいとします。 – mch

答えて

0

コンパイルする前に、実行ファイルへのシンボルの保存リンクに-gを使用する必要があります。 TEMPから

読書シンボル...(見つかりませデバッグシンボル)...行わ:あなたが使用している場合

gdb a.outエラーが発生します。

が、あなたは今g++ -g test.cppを使用している場合、GDBをお見せ:

のa.outからシンボルを読み取る

...完了。

そして今、あなたは、コマンドGDB

使用し、これを見ることができます:How to use GDB to find what function a memory address corresponds to

+0

'gdp a.outを使うなら' 'gdp ** 'とは何ですか? – Michi

+0

@Michiは言及してくれてありがとう - 私のENはあまりよくありません –

0

が、私はそれを考え出した、洞察力に感謝を。関数のメモリ割り当てを把握するために、GDBでブレークポイントを使用しました。私はmakefileに-gを使用したことに言及しなかったので、その部分はすでに完了していました。また、配列のメモリ割り当てが存在せず、問題を修正しました!歓声