2013-06-14 18 views
0

Я использую eclipse CDT в ОС Ubuntu и создал проект C с внешней статической библиотекой (libtomcrypt), связанной с ним. Он работает и дает результат правильно, но я хочу знать определение функций библиотеки, иерархию вызовов функций и их реализацию.Step Into Не работает в Eclipse CDT

Итак, включил режим отладки и начал выполнять шаги выполнения по строкам с помощью кнопки «на шаг», и он работает с функциями, которые я определил в 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() 
+0

Связанный: [почему не может войти в функцию] (http://stackoverflow.com/questions/10167484/why-cant-step-into-a-function-in-gdb). – mohit

+0

Что означает «стандартная библиотека с отладочной информацией»? Не могли бы вы рассказать? В моем случае я связываю библиотеку tomcrypt, но не любую стандартную библиотеку C. – annunarcist

+0

нужно ли что-либо делать с файлами .d? – annunarcist

ответ

0

Для отладки кода, отладчик будет необходима некоторая информация (например, какая строка кода соответствует для этого объектного кода, в исполняемый файл).

Чтобы сделать эту информацию доступной, необходимо специально обучать ваш компилятор (с -g опцией в gcc & g++).

Предположим, у вас есть библиотека, которую вы компилируете с помощью make-файла (как в вашем случае). Вам нужно посмотреть в файле файла библиотеки, для флагов, используемых для компиляции. Как и в,

CC=g++ 
CFLAGS=-c -Wall 

А затем, добавьте -g опцию в флагах:

CFLAGS=-c -Wall -g 

(Incase, ваш makefile не использует CFLAGS, вам нужно искать строки, где компиляция происходит и добавьте опцию -g для всех этих строк вручную).

Then 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 

EDIT: отметить также, что «-g» опция должна быть включена во время компиляции, а не во время связывания (как вы это делали).

+0

это решило проблему !! и просто узнать больше о режимах -g. В моем файле makefile уже есть опция -g3 (максимальная отладка), включенная в CFLAGS, но после включения опции -g эта вещь исправлена ​​и генерируется файл библиотеки с параметрами отладки. Это проблема совместимости версий? или -g3 не является подходящей опцией для отладки? Спасибо за вашу помощь!! – annunarcist

+0

'-g3' должно быть хорошо. Я думаю, проблема заключалась в том, что вы включили '-g' во время компоновки, за исключением того, что это должно быть сделано во время компиляции. '-g3' означает, что дополнительная информация отладки также сохраняется, что должно отлично работать со всеми отладчиками. – mohit