我在Ubuntu OS中使用eclipse CDT并创建了一个带有外部静态库(libtomcrypt)的C项目。它运行并正确输出,但我想知道库函数的定义,函数的调用层次结构及其实现。
因此打开调试模式并开始逐行查看执行步骤,使用"步入"按钮,它与我在main()中定义的函数一起工作(即,在本例中步入test_function()的工作)但是step into不适用于我调用的库函数(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()
答案 0 :(得分:0)
为了调试代码,调试器需要一些信息(例如,哪行代码对应 到此目标代码,在可执行文件中)。
要使此信息可用,您需要专门指导您的编译器(使用-g
选项
gcc
& g++
)。
假设您有一个库,您可以使用makefile进行编译(如您的情况)。你需要看一下 用于编译的标志的库的makefile。如,
CC=g++
CFLAGS=-c -Wall
然后,在flags中添加-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'选项,而不是在链接期间(如您所做)。