在 Visual Studio 中调试时,是否可以将一些 C/C++ 结构内容保存到磁盘?
Can I save some C/C++ structure contents to disk when debugging in Visual Studio?
我有一些大而旧的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.这不是那么简单 - 您不仅需要保存,还需要恢复对象 - 这是额外的努力。现成的解决方案之一是提升序列化库。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 在 c++ 中拥有一组结构的正确方法是什么?
- vscode g++链路故障:体系结构x86_64的未定义符号
- C++概念:如何使用'concept'检查模板化结构的属性?