在gdb - c ++中打印有关文件流对象的详细信息

时间:2011-04-19 12:38:57

标签: c++ debugging gdb

我有一个功能,其签名是这样的:

void someFunc(ifstream ifile) { 

此功能深深嵌入代码中。当我使用ddd调试此代码时,如何从ifstream对象获取文件的名称。尝试以下方法:
p ifile

ptype ifile  

导致大量信息被倾倒。有没有办法获取ifile是一个流的文件名?

谢谢,
斯利拉姆。

1 个答案:

答案 0 :(得分:2)

  

有没有办法获取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];
       //...
}