Печать деталей об объектах файлового потока в gdb - c ++ - PullRequest
1 голос
/ 19 апреля 2011

У меня есть функция, подпись которой выглядит примерно так:

void someFunc(ifstream ifile) { 

Эта функция встроена глубоко в код.Когда я отлаживаю этот код с помощью DDD, как я могу получить имя файла из объекта ifstream.Попытка сделать следующее:
p ifile или

ptype ifile  

приводит к выводу огромного количества информации.Есть ли способ получить имя файла, для которого ifile является потоком?

Спасибо,
Шрирам.

1 Ответ

2 голосов
/ 19 апреля 2011

Есть ли способ получить имя файла, для которого ifile является потоком?

Нет способа.Это невозможно.

std::ifstream не хранит имя файла и не предоставляет никакой функции get для получения имени файла.Таким образом, вы не можете получить его, учитывая объект типа std::ifstream.


Если вам действительно нужно знать имя файла внутри функции (и вы не можете изменить сигнатуру функции), тогда вы можете сохранить глобальная таблица поиска (или предпочтительно std::map) и добавление записи при каждом открытии файла, что-то вроде этого:

std::map<std::ifstream*, const char*> g_stream_file_pairs;

std::ifstream ifile("xyz/abc/filename.txt");
g_stream_file_pairs.insert(std::make_pair(&ifile, ""xyz/abc/filename.txt"));


void someFunc(std::ifstream & ifile) 
{ 
       const char* filename = g_stream_file_pairs[&ifile];
       //...
}
...