2014-07-24 2 views
1

Visual Studio 2010의 디버거가 최근에 잘못된 라인 및/또는 건너 뛰는 라인을 가리키고 있는데, 왜 그런지 모르겠습니다. 이것은 CUDA 프로젝트이며 CUDA 파일에서만 발생합니다. 나는 다음을 주목했다 :Visual Studio 2010 디버거가 잘못된 라인을 가리키고 있습니다.

  • 그것은 항상 프로그램의 같은 부분에서 발생한다.
  • 그것이 가리키는 라인은 항상 동일합니다. 즉 임의가 아닙니다.
  • 뒤에 놓으면 범칙금은 그것이 가리키는 줄을 변경합니다.
  • .cu - 파일에서만 발생합니다. 코드를 .cpp - 파일로 이동해도 문제가 다시 발생하지 않습니다.

    • 청소 및 솔루션을 재건 :

    은 내가 시도 무엇.

  • 수동으로 솔루션 폴더에서 다시 후 생성 된 모든 파일을 삭제하고
  • 모두 C/C++CUDA C/C++
  • 에 대한 디버그 모드에서 하지 사용 최적화에 컴파일러 설정 MSVC10에 대한 SP1을 설치하고 윈도우 업데이트를 통해 가능한 모든 업데이트를 할 .
  • 폴더 삭제 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
  • 원본 파일 만 사용하여 솔루션 다시 만들기.
  • 내 광고 확장을 사용하지 않도록 설정.

다음 코드를 줄이면 문제가 재현 될 수 있습니다. 이 코드는 .cu 파일 내부에 있어야하며 C/C++ 용 cuda 컴파일러로 컴파일해야 할 필요가있을 것입니다. 부스트를 포함하는 것은 꼭 필요한 것은 아니지만,이 예에서는 어떤 문제가 있는지 보여줍니다. 더 짧은 예가 뒤에 있습니다.

#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; 
} 

아무에게도이를 해결하는 방법이나 어떻게 이런 일이 일어날 수 있습니까? 이런 식으로 디버깅하는 것은 매우 짜증나는 일입니다.


더 짧은 예는 건너 뛴 줄만 보여줍니다. 외부 라이브러리가 필요하지 않습니다. 프로그램은 CPU의 지침과 지시 사항을 포함하지 않는 어떤 구조가없는 유형의 변수 선언을 포함하기 때문에

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

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

관련 질문 : http://stackoverflow.com/questions/3144880/visual-studio-2010-debugger-skipping, http://stackoverflow.com/questions/4934073/visual-studio-2010-debugger-jumps- around, http://stackoverflow.com/questions/1505823/visual-studio-2008-crazy-debugger-skipping, http://stackoverflow.com/questions/8917717/visual-studio-is-skipping-to-every- other-line-while-debugging – Didii

답변

2

, 디버거가 멈추지 않을 것입니다. 명령어를 실행 한 후 컴파일러가 제공 한 디버깅 정보를 사용하여 관련 소스 코드 줄을 찾습니다.

+0

줄을 건너 뛴 이유 만 설명합니다. 그러나 왜 이것이 .cu 파일에서만 발생하고 왜 잘못된 줄을 가리키는 지에 대해서는 설명하지 않습니다. .cpp 파일에서'bool status; '가있는 행은 건너 뛰지 않습니다. 또한 최적화가 명시 적으로 해제되어 있음을 기억하십시오. – Didii