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

Posted

技术标签:

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

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

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

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

【问题讨论】:

是的,当然有办法:编写自己的代码来执行此操作。但是不,对于这样的事情,没有任何类型的内置机制。但是,C++ 的奇妙之处在于您可以简单地自己实现它! 【参考方案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 库。

【讨论】:

以上是关于在 Visual Studio 中调试时,我可以将一些 C/C++ 结构内容保存到磁盘吗?的主要内容,如果未能解决你的问题,请参考以下文章

非调试模式时在 Visual Studio 的输出窗口中显示消息?

非调试模式时在 Visual Studio 的输出窗口中显示消息?

在Visual Studio代码中,当我调试/运行代码时,我想将参数(例如-i)传递给Python解释器

Visual Studio Code 调试 数组评估

在 Visual Studio 中调试时,我可以在返回之前找出返回值吗?

Visual Studio 拒绝忘记断点?