0

我在 Ubuntu OS 中使用 eclipse CDT 并创建了一个 C 项目,其中链接了外部静态库(libtomcrypt)。它运行并正确给出输出,但我想知道库函数的定义、函数的调用层次结构及其实现。

所以打开调试模式并开始使用“step into”按钮逐行查看执行步骤,它与我在 main() 中定义的函数一起工作(即,在本例中,step into 为 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 编译它(如您的情况)。您需要在library的 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 回答