在 Visual Studio 中调试时,是否可以将一些 C/C++ 结构内容保存到磁盘?

Can I save some C/C++ structure contents to disk when debugging in Visual Studio?

本文关键字:结构 C++ 磁盘 保存 调试 Studio Visual 是否      更新时间:2023-10-16

我有一些大而旧的C++程序和一些类,其中有它们的方法,我想调试。这些方法将一些结构作为输入,并返回一些结构作为输出。在调试期间,我想以一些简单的格式(如 JSON 或 XML(将输入和输出结构保存到磁盘:当我编写旧代码的包装以在我的程序中重用它时,它可以帮助我。

在VS调试模式下,我可以用眼睛轻松查看任何结构的内容,但默认情况下我无法将其正确保存到磁盘。

有没有办法在Microsoft Visual Studio的调试模式下将结构保存到磁盘?

不,VS 中没有这样的功能。执行此操作的唯一方法是手动创建一个文件并将对象转储到其中(通过使用输出流运算符很容易做到这一点,但是如果您想要 JSON 格式,则需要一个 json 库来执行此操作(例如 jsoncpp((。

可以通过#ifdef _DEBUG来保护此类代码,以确保它不会影响发布版本:

#ifdef _DEBUG
std::fstream debugFile( "C:/mydebug.txt", std::ios_base::out );
debugFile << object;
#endif

有没有办法在调试模式下将结构保存到磁盘 Microsoft Visual Studio?

不,VS 没有内置的这种方式。不过幸运的是,您不必自己编写所有内容。看看这个开源项目 - 只是文档中的一小部分摘录:

using nlohmann::json;
namespace ns {
// a simple struct to model a person
struct person {
std::string name;
std::string address;
int age;
};
void to_json(json& j, const person& p) {
j = json{{"name", p.name}, {"address", p.address}, {"age", p.age}};
}
void from_json(const json& j, person& p) {
p.name = j.at("name").get<std::string>();
p.address = j.at("address").get<std::string>();
p.age = j.at("age").get<int>();
}
}
// create a person
ns::person p {"Ned Flanders", "744 Evergreen Terrace", 60};
// conversion: person -> json
json j = p;
std::cout << j << std::endl;
// {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"}
// conversion: json -> person
ns::person p2 = j;
// that's it
assert(p == p2);

通过 Visual Studio - no.这不是那么简单 - 您不仅需要保存,还需要恢复对象 - 这是额外的努力。现成的解决方案之一是提升序列化库。