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

标签 c++ debugging gdb

我有一个函数,它的签名是这样的:

void someFunc(ifstream ifile) { 

此功能深嵌在代码中。当我用 ddd 调试这段代码时,如何从 ifstream 对象中获取文件名。尝试以下操作:
p ifile

ptype ifile  

导致大量信息被丢弃。有没有办法获取 ifile 流向的文件名?

谢谢,
斯里拉姆。

最佳答案

Is there a way to get the filename that ifile is a stream to?

没办法。这是不可能的。

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];
       //...
}

关于c++ - 在 gdb 中打印有关文件流对象的详细信息 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5716463/

相关文章:

c - 使用 gdb 进入内核源代码

c++ - const typedef 之间的区别

c++ - 如何在 C++ 中将 unicode 字符转换为大写

asp.net - 在ASP.NET MVC 5 Controller 方法中调试多个线程

PHP 模块在 ts_allocate_dtor 上崩溃

c++ - 比较函数不适用于 equal_range

c++ - 如何在阅读时获取套接字流的位置

r - 在 plyr 或 dplyr 中调试 - 查看哪个组

debugging - Visual Studio 2013 尝试加载 iisexpress.pdb