我有一些古老的C ++程序,还有一些我想调试的类及其方法。这些方法将某些结构作为输入,并将某些结构作为输出。在调试期间,我想将输入和输出结构以JSON或XML等简单格式保存到磁盘:当我编写旧代码的包装以在程序中重用时,它可以为我提供帮助。
在VS调试模式下,我可以轻易地看到任何结构的内容,但是默认情况下,我无法正确地将其保存到磁盘上。
有什么方法可以在Microsoft Visual Studio的Debug模式下将结构保存到磁盘上?
答案 0 :(得分:1)
不,VS中没有此类功能。唯一的方法是手动创建文件并将对象转储到文件中(使用output stream operator相当容易,但是如果要JSON格式,则需要json库为此(例如,jsoncpp)。
您可以通过#ifdef _DEBUG
保护此类代码,以确保它不会影响发行版:
#ifdef _DEBUG
std::fstream debugFile( "C:/mydebug.txt", std::ios_base::out );
debugFile << object;
#endif
答案 1 :(得分:0)
是否有任何方法可以在Debug模式下将结构保存到磁盘 Microsoft Visual Studio?
不,VS没有内置这种方法。不过,对您来说幸运的是,您不必自己编写所有内容。请参见this open-source project-只是文档的一小部分摘录:
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);
答案 2 :(得分:0)
通过Visual Studio的方式-不。这不是那么简单-您不仅需要保存,而且还需要还原对象-这是额外的工作。一种可用的解决方案是boost Serialization库。