gpt4 book ai didi

c++ - gdb 上的 "No frame is currently executing in specified block"错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:10:29 25 4
gpt4 key购买 nike

我正在用 C++ 实现 print_array 函数,并使用 gdb 对其进行调试。 for循环似乎有问题,但我真的不明白为什么。

代码是:

void print_array(const int array[], const int length) {
cout << "[";
for (int i=0; i<length; i++) {
// Last element
if (i == length-1) {
cout << array[i] << "]" << endl;
} else {
// Any other element
cout << array[i] << ", ";
}
}
cout << endl;
}

主要功能是:

int main() {

int array[] = {1, 3, 5, 7, 9, 15, 15, 16, 40, 70};
int length = 10;

cout << "Array is = ";
print_array(array, length);
.
.
.

使用 gdb 调试它,并将其设置为 watch i,我得到以下信息

.
.
.
Thread 2 hit Hardware watchpoint 4: i

Old value = 9
New value = 10
0x0000000100001afd in print_array (array=0x7fff5fbff8e0, length=10) at binary_search.cpp:8
8 for (int i=0; i<length; i++) {
(gdb)
No frame is currently executing in specified block
0x0000000100001b02 in print_array (array=0x7fff5fbff8e0, length=10) at binary_search.cpp:8
8 for (int i=0; i<length; i++) {
(gdb)
No frame is currently executing in specified block
Command aborted.
(gdb)

要检查的基本内容是遍历数组的 for 循环,但情况似乎并非如此(除非我遗漏了一些明显的东西)。

问这个问题的“真正原因”是 gdb 似乎总的来说给出了奇怪的结果。我已经安装在 Mac 10.12.3 中,但不支持它。因此,安装时间很长,我在网上看到其他类似的案例,人们在 Mac 10.12.3 上安装 gdb 后遇到了奇怪的问题。

最佳答案

“指定 block 中当前没有正在执行的帧”意味着 gdb 试图从不属于应用程序帧的内存地址读取。

调试到此:

Thread 2 hit Hardware watchpoint 4: i

Old value = 9
New value = 10
0x0000000100001afd in print_array (array=0x7fff5fbff8e0, length=10) at binary_search.cpp:8
8 for (int i=0; i<length; i++) {

循环条件不再为真,应用程序希望在 for 循环之后继续。但是 GDB 仍在监视 i 所在的内存地址。

使用delete 4 删除硬件观察点,应该可以继续调试。

关于c++ - gdb 上的 "No frame is currently executing in specified block"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42371276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com