0

Ubuntu OS で Eclipse CDT を使用しており、外部静的ライブラリ (libtomcrypt) がリンクされた C プロジェクトを作成しました。実行して正しく出力しますが、ライブラリ関数の定義、関数の呼び出し階層、およびそれらの実装を知りたいです。

したがって、デバッグモードをオンにし、「ステップイン」ボタンを使用して実行ステップを1行ずつ調べ始めました。これは、main() で定義した関数で動作します (つまり、この例では test_function() でステップインが機能します)。私が呼び出しているライブラリ関数 (この例では register_hash(&sha256_desc) & find_hash("sha256") 関数) では機能しません。

ステップインせずに行をスキップして、次の行に移動します。この問題を解決するのを手伝ってください。

   int main()
    {
    /* some code initialization */

            double sha_elapsed;

                /* register hashes .... */
                if ((err=register_hash(&sha256_desc)) == -1) {
                    printf("Error registering MD5.\n");
                    return -1;
                }

                /* get hash index */
                indx = find_hash("sha256");
                if (indx == -1) {
                    printf("Invalid hash name!\n");
                    return -1;
                }
            printf("something");
            test_function() {
                //code for the function
            }
       //remaining code
}//end of main()
4

1 に答える 1

0

コードをデバッグするために、デバッガーはいくつかの情報を必要とします (たとえば、実行可能ファイル内のこのオブジェクト コードに対応するコード行)。

この情報を利用できるようにするには、コンパイラに具体的に指示する必要があります ( &の-gオプションを 使用)。 gccg++

(あなたの場合のように)makefileを使用してコンパイルするライブラリがあるとします。コンパイルに使用されるフラグについては、ライブラリのメイクファイルを調べる必要があります。のように、

CC=g++
CFLAGS=-c -Wall

次に、-gフラグにオプション を追加します。

CFLAGS=-c -Wall -g

(makefileを使用しない場合はCFLAGS、コンパイルが行われる行を探して、-gそれらすべての行に手動でオプションを追加する必要があります)。

それからmakeあなたの図書館。これで、次のようにテスト プログラムをコンパイルできます。

gcc -I/home/xxx/Documents/libtomcrypt-1.17/src/headers -c -g Tomcrypt_SHA-256_Bmark.c jg_timing.c -ltomcrypt
gcc -I/home/xxx/Documents/libtomcrypt-1.17/src/headers Tomcrypt_SHA-256_Bmark.o jg_timing.o -o executable -ltomcrypt 

編集:また、「-g」オプションは、リンク中ではなく、コンパイル中に含める必要があることに注意してください(あなたがしたように)。

于 2013-06-19T06:49:45.533 に答える