Как просмотреть файл заголовка (.h), который был включен при отладке исполняемого файла? - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно убедиться, что последние изменения в заголовочном файле были включены в мой исполняемый файл, который был скомпилирован через GDB. В основном я хочу запустить GDB на исполняемый файл и перечислить исходный код в заголовочном файле.

Я попробовал список gdb load_update_recs (исполняемый файл) (перечислены только строки из скомпилированной программы c, а не файл заголовка)

Я хотел бы указать исходный код заголовкафайл в ГБД

Ответы [ 2 ]

3 голосов
/ 28 октября 2019

Отладочная информация не включает в себя копию исходного кода, она включает ссылку на файл и номер строки. Итак, если вы измените заголовочный файл и затем перечислите исходный файл, вы увидите последнюю версию исходного файла, даже если это не то, что фактически скомпилировано в вашу программу. Теоретически GDB должен предупредить вас, если он увидит, что исходный файл был изменен после исполняемого файла, однако, если по какой-то причине временные метки не работают / не повреждены в вашем исходном файле или исполняемом файле, то это предупреждение может не появиться.

С этим предупреждением, если вы просто list, тогда GDB попытается перечислить исходные строки вокруг текущего местоположения, или, если вы не работаете, я думаю, что первый основной исходный файл (не заголовочный файл) изваша программа.

Что вы можете сделать, так это список поставок с указанием местоположения, поэтому list my_header.h:20 до строки списка 20 из my_header.h. Хотя это только покажет вам текущее содержимое этого файла.

0 голосов
/ 28 октября 2019

GDB предоставляет две функции, которые помогут вам просматривать заголовочные файлы: (1) список источников и (2) редактирование имени файла: linenum. Как указано в предыдущем ответе, GDB не может определить, является ли файл текущим

. list sources покажет вам все исходные файлы в сборке (для файлов, скомпилированных с -g). Например, программа

#include <stdlib.h>
#include <stdio.h>

void main(void) { int x ;
  fgets(NULL, 100, stdin) ;
}

Will show
gdb a.out
(gdb) info sources
Source files for which symbols have been read in:

/home/owner/a.c, /usr/lib/gcc/x86_64-linux-gnu/7/include/stddef.h, /usr/include/x86_64-linux-gnu/bits/types.h, /usr/include/x86_64-linux-gnu/bits/libio.h, 
/usr/include/stdio.h, /usr/include/x86_64-linux-gnu/bits/sys_errlist.h

Вы можете запросить редактирование / просмотр любого файла, используя 'edit filename: line'. Имя файла может быть указано без пути, если оно отличается

edit stdio.h:1
   # If base name not unique, use full path:
edit /usr/include/stddef.h:1

Обратите внимание, что номер строки обязательный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...