【问题标题】:How to access IloIntArray elements while in Visual Studio debugger?如何在 Visual Studio 调试器中访问 IloIntArray 元素?
【发布时间】:2016-04-23 16:55:04
【问题描述】:

您好 StackOverFlow 研究员,

我正在通过 Concert Technology 库使用 CPLEX 在 C++ 中求解 MILP 模型,该库将变量和参数数组分别编码为 IloVarArrayIloArray 对象。我已经阅读了很多关于如何在调试器模式下访问 Visual Studio 上的普通数组的问题。

但是,如果您想访问存储在IloIntArray arrayi-th 位置上的值,则在立即窗口 上查询array,i-1 并不是很有用,因为您会得到一个信息丰富的消息:

IloArray<__int64>: {_impl=0x0000028c514ad968 {_max=4 _sizeof=8 _size=3 ...} }

如您所见,其中包含一条有用的信息,即数组大小,例如array 在其第一个维度上包含三个元素,因为它可能包含多个元素。如果尝试索引超出数组边界,它甚至不会提示错误!

但是除非包含大量 cout 指令,可能还有一堆 for 循环,以及重建项目一百万次,否则您无法访问数组中的值,这非常即使在中等大小的模型中也很耗时。

那么,我们真的可以在调试器上轻松访问IloArray 元素吗?还是cout 是我唯一可用的选项?

【问题讨论】:

    标签: c++ visual-studio c++builder cplex


    【解决方案1】:

    您知道像 IloIntArray 这样的类实际上只是“句柄”类吗?除了指向相应“实现”类的实例的指针(通常称为“_impl”)之外,它们几乎不包含(或不包含任何内容)。它们只是被定义为使使用这些类的语法看起来更清晰(例如,您不需要继续取消引用指针等)。

    我曾经有一组 Visual Studio 定义,用于更改调试器显示这些类的实例的方式(例如,参见 https://msdn.microsoft.com/en-us/library/aa730838(v=vs.80).aspx),但它似乎丢失了,我再也找不到副本了。

    更高版本的 VS 使用不同的方法:https://blogs.msdn.microsoft.com/vcblog/2012/07/12/debugger-type-visualizers-for-c-in-visual-studio-2012/

    【讨论】:

    • 非常感谢!总体而言,Concert Technology 确实非常有用。我确实承认这是一种构建和求解模型以及促进访问 CPLEX 优化过程的更清洁和简单的方法,但是需要一段时间来适应它才能有效地使用它。感谢您的帮助@TimChippingtonDerrick
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多