gpt4 book ai didi

c++ - 使用 Visual Studio 2010 C++ 调试问题 - 出现奇数

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:16 26 4
gpt4 key购买 nike

我的代码遇到了一些非常奇怪的行为。

当我运行它并通过调试器我设法找出导致它的行时,它抛出了一个访问冲突错误:

for( int x=0; x<width; x++) {

int current = edgeKernelXY(left+x,top+y,true,0);
....
}

我在方法 edgeKernelXY 中放置了一个调试点,但代码从未进入该方法。

接下来我检查的是我传递给它的值是什么。左、上和 y 看起来很正常。但是根据调试器,x = 19840810 和 current = 19840810。我不明白这是怎么发生的,尤其是如果我在循环开始时将 x 声明为 0。宽度正确为 40。

x 和 current 尚未在 forloop 范围内的其他任何地方声明。这里可能出了什么问题?

编辑:

我修改了如下代码:

    for( int x=0; x<width; x++) {
int current = edgeKernelXY(left,top+y,true,0);
if( current > THRESHOLD &&
edgeKernelXY(left+x,top+y,true,1) > THRESHOLD &&
edgeKernelXY(left+x,top+y,true,2) > THRESHOLD ) {
} else {
current = 0.0f;
}

具体来说,我在第一次调用 edgeKernelXY 时将 left+x 更改为 just left。这似乎运行并且对 edgeKernelXY 的第二次调用显示 x 正确设置为 0。但是行为不是我想要的。 Left + x 仍然让我对 x 产生疯狂的值,这导致了访问冲突。

    for( int x=0; x<width; x++) {

int current;
current = 0;
current = edgeKernelXY(left+x,top+y,true,0);

还显示电流问题。

最佳答案

由于您正在调试发布版本,因此您不能依赖调试器在监 window 口等中显示正确的值。可以完成调试 Release模式,但相当棘手。通常,它需要查看反汇编以了解正在发生的事情以及事物的状态(即,x 几乎肯定保存在寄存器中)。

如果您无法执行完整的调试发布,您仍然可以通过在关闭优化的情况下进行构建来获得更好的调试体验(这可以在发布构建中完成,并且可以在不链接到调试库的情况下完成)。

假设您在 IDE 中构建,只需进入项目设置并将 C/C++ - Optimization - Optimization 值更改为 Disabled (/Od) .

如果这通过在项目范围内设置它而导致问题(这不应该),您可以通过右键单击您有兴趣调试和设置的源文件,在每个源文件的基础上执行相同的操作该源文件的属性中的选项。请记住在完成后清除这些设置(并且不要将它们 checkin 源代码管理),因为 IDE 不会明确表示存在特定于源文件的设置,因此可能会造成混淆。

关于c++ - 使用 Visual Studio 2010 C++ 调试问题 - 出现奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9930536/

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