c++ - Visual Studio 2010 调试器指向错误的行

标签 c++ visual-studio-2010 debugging cuda nsight

Visual Studio 2010 中的调试器最近指向错误的行和/或跳过行,我不知道这是为什么。这是一个 CUDA 项目,只发生在 CUDA 文件中。我注意到以下几点:

  • 它总是发生在节目的同一部分。
  • 它指向的线总是相同的,即不是随机的。
  • 在罪魁祸首行之后放置额外的代码会改变它指向的行。
  • 它只发生在 .cu 文件中。将代码移动到 .cpp 文件不会重现问题。

我尝试过的:

  • 清理并重建解决方案。
  • 为 MSVC10 安装 SP1 并通过 Windows 更新进行所有可能的更新
  • 将编译器设置为在 Debug模式下对 C/C++CUDA C/C++ 使用优化
  • 手动删除所有创建的文件,然后从解决方案文件夹中重建。
  • 删除文件夹 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
  • 仅使用源文件重新创建解决方案。
  • 禁用我的扩展程序。

我已设法将代码缩减为以下可能会重现问题的代码。请注意,此代码必须位于 .cu 文件中,并且很可能需要使用 C/C++ 的 cuda 编译器进行编译。包括 boost 并不是真正必要的,但这个例子确实显示了我遇到的问题。一个较短的例子在后面。

#include <boost/numeric/ublas/matrix.hpp>
using boost::numeric::ublas::matrix;

struct foo {
    foo() : mat(NULL) {}
    matrix<float>* mat;
};

bool func(foo *data) {
    bool status; // <- skipped line

    status = false;
    if (status) {
        std::cout << "test\n";
        return (status); // <- error reported here
    }

    int size = data->mat->size1(); // instead of here

    return status;
}

int main(int args, char* argv[]) {
    func(NULL); // force error by passing NULL pointer

    return 0;
}

有没有人知道如何解决这个问题或者这是怎么发生的?必须以这种方式进行调试非常烦人。


较短的示例仅显示跳过的行。无需外部库。

bool func() {
    bool status; // <- skipped line
    status = false;
    return status;
}

int main(int args, char* argv[]) {
    func();
    return 0;
}

最佳答案

由于程序只包含 CPU 指令,而没有构造的类型的变量声明不包含任何指令,因此调试器不会就此停止。它只是执行指令,然后使用编译器提供的调试信息找到相关的源代码行。

关于c++ - Visual Studio 2010 调试器指向错误的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945143/

相关文章:

c++ - Netbeans "Resolve missing debugger command"C++

c++ - 在 VC2010 中初始化 boost::random::discrete_distribution

visual-studio-2010 - OpenCV 2.2安装-一切正常,但调试输出显示 “cannot find or open PDB file”

visual-studio-2010 - Visual C++ 2010 中的 QuantLib 日期类

c++ - setupUi() 上的段错误

c++ - 为什么将对象分配给 map 会产生空对象?

java - 同一台机器上的应用程序之间最安全的通信方法

c++ - 将 numpy 数组与 boost.python : pyublas or boost. numpy 交换?

python - 使用来自终端的参数调试 python 脚本

visual-studio-2010 - 使用 Azure 计算模拟器调试单角色实例