Функция gcc: создание списка исходных файлов из двоичного файла

Имеет ли gcc функцию, которая может список исходных файлов (.c / .c ++ /. H) из двоичного (если двоичный файл имеет отладочную информацию) .. ??

Я знаю, что того же можно добиться с помощью objdump и GDB. Но "objdump" и "GDB" выдают список только файлов ".c".

Для Exapmle: у меня есть два файла (test.c и test.h), и я скомпилировал тестовый код с параметром «-g» и использовал «objdump», как показано ниже:

bdk4user@llvm:~/home$ objdump --dwarf=decodedline a.out 

a.out:     file format elf64-x86-64

Decoded dump of debug contents of section .debug_line:

CU: test.c:
File name                            Line number    Starting address
test.c                                         4            0x40057d
test.c                                         6            0x400585 
test.c                                         7            0x40058f
test.c                                         8            0x4005a1
...

Но он не перечисляет также используемый файл ".h".

Итак, мой вопрос: есть ли в GCC какая-либо функция, которая может предоставить список всех файлов, которые используются в двоичном формате?

ИЛИ любая другая утилита для достижения того же .. ??

Заранее спасибо.


person Anshu Sharma    schedule 03.04.2015    source источник
comment
Похоже на вопрос XY (я хочу сделать X, я думаю, Y - правильное решение, поэтому я спрашиваю, как сделать Y). Чего вы на самом деле пытаетесь достичь?   -  person Mats Petersson    schedule 03.04.2015
comment
Когда вы компилируете программу, передайте опцию -E и посмотрите на строки, начинающиеся с # в выводе. Любое другое место в цепочке инструментов уже слишком поздно.   -  person Marc Glisse    schedule 03.04.2015
comment
@ Матс Петерссон: Я просто хочу знать, поддерживает ли gcc функцию перечисления исходного файла из двоичного кода. извините, я не смог передать должным образом.   -  person Anshu Sharma    schedule 03.04.2015
comment
@AnshuSharma Как уже упоминалось, gcc не используется для проверки двоичных файлов.   -  person πάντα ῥεῖ    schedule 03.04.2015
comment
@ πάντα ῥε: Спасибо, что поделились своим опытом.   -  person Anshu Sharma    schedule 03.04.2015


Ответы (1)


«Но в нем не указан файл« .h », который также используется».

Поскольку файлы заголовков обрабатываются препроцессором C / C ++, даже до того, как файлы .o будут сгенерированы, ни один из этих инструментов не может их понять.

person πάντα ῥεῖ    schedule 03.04.2015
comment
Препроцессор вводит (собственные) указания происхождения каждой строки, которые используются для предупреждений, а также сохраняются в отладочной информации. Если в .h есть реальный код, команда OP отобразит его. - person Marc Glisse; 03.04.2015
comment
@ πάντα ῥεῖ за быстрый ответ. значит, что ни один инструмент не может предоставить информацию о файлах .h. Предоставляет ли gcc 'список исходных файлов, как дает objdump .. ?? - person Anshu Sharma; 03.04.2015
comment
@Marc Glisse: Спасибо за ответ. я вас не понял. Если в .h есть реальный код, команда OP отобразит его ..? Что такое команда OP? - person Anshu Sharma; 03.04.2015
comment
@AnshuSharma Что такое команда OP? Что вы написали в своем вопросе: objdump --dwarf=decodedline a.out - person πάντα ῥεῖ; 03.04.2015
comment
OP = Исходное сообщение (er) - OP's comand = Команда размещена в исходном сообщении. - person Mats Petersson; 03.04.2015
comment
Извините, я не мог понять (теперь понял, что OP означает). @Marc Glisse: я определил #define в файле test.h, который используется в файле test.c, тогда он должен также указать файл test.h. пожалуйста, поправьте меня, если я ошибаюсь. - person Anshu Sharma; 03.04.2015
comment
Предоставляет ли gcc список исходных файлов, как objdump .. ?? Пожалуйста, поделитесь своим опытом по этому поводу .. - person Anshu Sharma; 03.04.2015
comment
@AnshuSharma я определил #define Как уже упоминалось, ничего, что обрабатывается препроцессором, не будет видно в этом списке, несмотря на то, что он выглядит как встроенный код. - person πάντα ῥεῖ; 03.04.2015
comment
Фактический код @AnshuSharma означает, что есть определение функции. Макросы почти невидимы. - person Marc Glisse; 03.04.2015
comment
@ πάντα ῥεῖ: Понятно, спасибо. как насчет gcc ..? содержит ли он список исходных файлов ... если да ... пожалуйста, опубликуйте команду .. - person Anshu Sharma; 03.04.2015
comment
@Marc Glisse: Спасибо, что поправили меня. gcc удерживает эту функцию. ?? - person Anshu Sharma; 03.04.2015
comment
@AnshuSharma gcc используется для компиляции исходного кода. Можно позволить ему создать список зависимостей файла заголовка, пока выполняется компиляция (см. Параметры -MM и др.). - person πάντα ῥεῖ; 03.04.2015
comment
@ πάντα ῥεῖ: Спасибо за информацию. проверим тоже самое - person Anshu Sharma; 03.04.2015