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

时间:2018-08-25 13:11:52

标签: c++ visual-studio debugging

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

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

有什么方法可以在Microsoft Visual Studio的Debug模式下将结构保存到磁盘上?

3 个答案:

答案 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库。