【问题标题】:Can I save some C/C++ structure contents to disk when debugging in Visual Studio?在 Visual Studio 中调试时,我可以将一些 C/C++ 结构内容保存到磁盘吗?
【发布时间】:2018-08-25 13:11:51
【问题描述】:

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

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

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

【问题讨论】:

  • 是的,当然有办法:编写自己的代码来执行此操作。但是不,对于这样的事情,没有任何类型的内置机制。但是,C++ 的奇妙之处在于您可以简单地自己实现它!

标签: c++ visual-studio debugging


【解决方案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

【讨论】:

    【解决方案2】:

    有什么方法可以在调试模式下将结构保存到磁盘 微软 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);
    

    【讨论】:

      【解决方案3】:

      通过 Visual Studio - 不。这不是那么简单——你不仅需要保存,还需要恢复对象——这是额外的努力。一种现成的解决方案是boostSerialization 库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-12
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多