提问人:BENG 提问时间:9/19/2023 更新时间:9/19/2023 访问量:28
声明可变大小 std::vector 时代码中的 LLDB 调试冻结
LLDB debugging freezing in code when declaring variable-size std::vector
问:
我在 M2Pro Macbook 上使用 VSCode。当单步执行某个方法的代码时,VSCode 的调试器会冻结并且无法加载局部变量。经过大量的催促我的代码,我找到了直接触发它的原因,但我不知道如何修复它,因为代码在不调试时运行得很好。
下面是冻结调试器的代码片段:
int max_edges = 0;
for (int i=0; i<N_points; i++) {
max_edges += point_cache.pairedEdgeLen(points_attatched[i]);
}
std::vector<int> TEST_VECTOR(max_edges);
在我的原始代码中,被替换为一个对象,该对象是一个自定义哈希表集类,它利用 .必须使用初始大小进行初始化,该大小在添加元素时保持不变,以优化性能。我在这里使用,因为这就是导致问题的原因。我发现调试器一旦进入一个以可变大小声明 a 的方法,它就会冻结。此外,如果我要替换,例如,我看到调试器将以巨大的大小初始化此向量。此映像来自 VSCode 的方法中的断点,但在初始化之前。TEST_VECTOR
IdSet
std::vector
IdSet
std::vector
lldb-mi
std::vector
std::vector<int> TEST_VECTOR(max_edges);
std::vector<int> TEST_VECTOR(5);
int
TEST_VECTOR
我有几个问题。
像这样初始化向量是不好的形式吗?我假设 C++ 没有为这个向量分配荒谬的空间量,然后在它到达行时调整它的大小。我正在用作编译器。我猜这是.clang++
lldb
调试时如何解决此问题?我非常想逐步执行此代码。我是否应该在方法的开头初始化具有恒定长度的向量,然后在到达我本来会声明的行时调整大小?
编辑:我发现,当在方法的头部声明向量时,用大小初始化向量。lldb
0
答: 暂无答案
评论