2012-05-25 2 views
2

필자는 보통 C++ 용 Qt Creator를 사용하고 있습니다. 내 프로그램의 주장이 실패하면, 어떤 주장이 실패했는지를 알 수있다. 나는 응용 프로그램에 뛰어 시도를 클릭 할 수Visual Studio에서 어설 션이 실패했음을 표시 할 수 있습니까?

Failed assertion

하지만 실패한 주장 말하지 않습니다 Visual Studio에서, 나는 단지이를 참조하십시오. assert(false) Visual Studio에서 msvcr100d.dll에 대한 소스 코드를 표시하려고 시도했지만 사용할 수 없습니다.

내 프로그램에서 어설 션이 실패한 것을 어떻게 알 수 있습니까? 나는 정말로 중단 점과 std::cout의 조합을 사용하여 성가신 수동 검색을 자동으로 추적 할 수있는 무언가로하고 싶지 않습니다.

편집 : Visual Studio는 실제로 나를 위해 .PDB 파일을 생성했지만 여전히 작동하지 않습니다. 디버거가 실패한 어설 션이있는 행을 강조 표시하지 않지만 어설 션 실패 : false, main.cpp 파일, 명령 행의 행 8이 표시됩니다. 왜 내가 그 선을 보여줄 수없고 변수를 검사 할 수 없는가? 내 말은, 모든 정보를 사용할 수있는 것 같습니다 ...

+0

참조 @stackoverflow.com/q/2108000/11343 – CharlesB

+1

@CharlesB이 질문은 다른 방법입니다. –

답변

5

"재시도"를 클릭하면 디버거로 응용 프로그램의 소스 코드가 손상됩니다. 이렇게하면 실패한 주장을 포함하는 행이 강조 표시되므로 여러 개의 중첩 된 주장을 한 줄에 쌓는 것을 원하지 않는 한 범인을 쉽게 볼 수 있습니다. 그리고 당신이 그렇게한다면, 당신은 이것이 당신에게 초래할 수있는 모든 고통을받을 자격이 있습니다.

응용 프로그램의 현재 빌드에서 사용할 수있는 디버깅 기호가 없기 때문에 현재 작동하지 않는 이유가 더 많습니다. Visual Studio에 번들로 제공되는 컴파일러로 프로젝트를 만들 때 프로젝트 설정에 따라 디버그 기호가 포함 된 .PDB 파일이 생성됩니다. 이는 마지막 오류가 발생한 행과 같이 디버깅 중에 유용한 정보를 얻는 데 필요합니다.

응용 프로그램을 컴파일 할 때 디버그 기호를 생성하도록 설정했는지 확인하십시오./bin 디렉토리에 .PDB 파일이 있어야합니다. As discussed here의 경우 디버그 심볼 생성은 최적화가 활성화되어 있는지 여부와 직결됩니다 (구성은 일반적으로 "릴리스"라고 함).

업데이트 : Qt Creator에서 응용 프로그램을 컴파일/빌드 한 다음 Visual Studio에서 바이너리를 디버깅하려고합니다. VS의 도구를 사용하여 컴파일하지 않으면 VS 디버거에서 읽을 수있는 디버그 기호가 생성되지 않습니다.

Visual Studio로 빌드 한 다음 Qt Creator로 디버깅하려고하면 디버깅 기호를 해석하지 못할 수도 있습니다.

따라서 건물을 짓기 위해 하나의 도구 세트를 사용하는 것이 좋습니다. 어떤 IDE를 사용하든 상관 없지만 같은 도구로 컴파일/빌드해야합니다. Qt Creator 또는 Visual Studio에서 컴파일러와 링커를 번들로 사용하도록 구성 할 수 있습니다. 일반적으로 Qt Creator는 Win32 포트 GCC와 함께 제공되지만 Microsoft의 도구 세트를 사용하여 빌드하는 것이 쉽지 않습니다. 그러면 VS를 사용하여 코드를 디버깅 할 수 있습니다.

+0

이것은'assert (false)'를 실행 한 후 "재시도"가 나에게 가져 오는 것입니다 : http : // i.imgur.com/w1zFL.png 이것이 어떤면에서 도움이되는지는 알 수 없습니다. Visual Studio에서 Qt Creator처럼 내 어설 션이 실패한 행을 강조 표시 할 수 있습니까? – Pieter

+0

@Pieter 네, 그게 내 대답에 관한 것입니다. 오류 메시지가 표시됩니다 : * "사용할 수있는 소스 없음 : 어떤 호출 스택 프레임에도 심볼이로드되지 않았습니다. [따라서] 소스 코드를 표시 할 수 없습니다"*. VS 디버거가 디버그 심볼을 찾을 수 있도록 디버그 심볼을 생성하여이를 수정합니다. Qt Creator의 설정에 따라 기본적으로이 문제가 발생하지만 디버그 정보를 생성하기 위해 VS * not *를 구성했습니다. 이 설정을 변경해야합니다. 일단하면 VS는 Qt Creator가하는 것과 똑같이 동작합니다. 나는 이것을 항상 사용한다. –

+0

오, 죄송합니다. 처음에는 DLL에 대한 디버그 기호를 얻는 것에 대해 이야기하고 있다고 생각했습니다. Qt Creator에서이 Visual Studio 프로젝트를 열려고하지 않았습니다. 이미 [this] (http://i.imgur.com/fSrxK.png) 설정이 활성화되었지만 문제가 해결되지 않았습니다. 내가 뭘 놓치고 있니? * visual studio 2010 용 Google 검색에서 디버그 기호를 생성합니다. * 사용할 수있는 어떤 것도 반환하지 않았습니다. – Pieter

관련 문제