2014-01-20 2 views
0

Я пытаюсь заставить ValGrind рассказать мне, что случилось с моей программой. Каждый фрагмент документации на лицевой стороне Интернета говорит о том, что вы должны предоставить -g вариант GCC, но ни один документ не говорит, нужен ли вам этот флаг в времени компиляции или link-time (или оба). Так что это?Когда использовать флаг -g для GCC

+2

'-g' - это опция компилятора, а не вариант компоновщика. – Jarod42

ответ

3

В документации GNU ld указано, что -g будет игнорироваться, поэтому передать его не имеет смысла. В общем, вы передаете -g в gcc (что действительно является интерфейсом для всего процесса компиляции, а не только для компилятора), и он позаботится об этом.

+0

Чтобы быть на 100% понятным: вы говорите, что '-g' требуется в _compile-time_ и не требуется в _link-time_? – MathematicalOrchid

+0

@MathematicsOrchid Да, см. 'Man ld', если у вас есть какие-то сомнения. Он сказал бы вам, что '-g' предоставляется для _ совместимости с другими инструментами. – devnull

+0

@MathematicsOrchid Да, это так. – pmr

0

GCC обеспечивает флаг -g, чтобы получить отладки, поэтому один компиляции программы как Рассмотрим код example.c как:

#include <stdio.h> 
/* Warning: This program is wrong on purpose. */ 
int main() 
{ 
int age = 10; 
int height; 
printf("I am %d years old.\n"); 
printf("I am %d inches tall.\n", height); 
return 0; 
} 

По умолчанию, если вы собираете сказать, используя make example Это вызовет команда

cc  example.c -o example 

Теперь вы запускаете команду как

cc -g example.c -o example1 

, то вы найдете size of the file example1 больше, чем size of example , потому что флаг -g активировал отладочную информацию.

При работе valgrind -g флаг не требуется. -g требуется только в процессе компиляции.

Смежные вопросы