다음 기능을 수행하십시오.
DataTable go() {
return someTableAdapter.getSomeData();
}
이 함수에서 중단 점을 설정하면 반환 된 값을 검사 할 수 있습니까? 페이지 go()
의 데이터 그리드에 직접 연결됩니다 .aspx
.
리턴 된 데이터 테이블을 검사하는 유일한 방법은 임시 변수를 사용하는 것입니다. 그러나 그것은 약간 불편합니다. 다른 방법이 없습니까?
답변
내가 아는 한에서는 아니다. 당신이 경우주의 할 변수를 추가,이 릴리스의 컴파일러에 의해 제거 얻을 것이다 어쨌든 빌드 …
업데이트 :
이 기능은 VS2013에 추가되었습니다 . 자동 창에서 반환 값을 $ReturnValue
보거나 감시 / 즉시 창에서 사용할 수 있습니다.
값은 함수에서 복귀 한 후에 만 직접 볼 수 있으므로 액세스하는 가장 쉬운 방법은 함수 호출에 중단 점을두고 호출 (F10)을하는 것입니다.
VS2015 업데이트 : boo! 불행히도 VS2017의 VS2015 (devenv v14)
업데이트에 없는 것으로 보입니다 . (devenv v15)
답변
고객 피드백 사이트에 따라 CLR 4.5.1 을 사용하여 Visual Studio 2013에서 수행 할 수 있습니다. . C #의 이전 버전에서는 사용할 수 없었습니다.
Visual Studio 2008 및 이전 버전은 VB.NET에서 지원했습니다. C / C ++ 개발자는 항상 사용할 수있었습니다.
답변
나는 이것이 매우 유용한 일이라는 데 동의합니다. ” OzCode ” 라는 Visual Studio 상용 확장의 일부로 구현했습니다 .
이를 통해 코드 편집기에서 메소드 리턴 값을 HUD 디스플레이의 일종으로 볼 수 있습니다.
자세한 내용은 이 비디오 를 참조하십시오 .
답변
Microsoft에 따르면 관리 코드로이를 안정적으로 구현할 수있는 방법이 없습니다. 이것은 그들이 알고 있고 작업중인 문제입니다.
네이티브 C ++ 또는 VB6 코드를 디버깅 한 경험이있는 사람들을 위해 Autos 창에서 함수 반환 값이 제공되는 기능을 사용했을 수 있습니다. 불행히도이 기능은 관리 코드에는 존재하지 않습니다. 반환 값을 로컬 변수에 할당하여이 문제를 해결할 수 있지만 코드를 수정해야하므로 편리하지 않습니다. 관리되는 코드에서는 어떤 함수의 반환 값을 결정했는지가 훨씬 까다 롭습니다. 여기서는 일관되게 올바른 작업을 수행 할 수 없으므로 디버거에서 잘못된 결과를 제공하는 대신 기능을 제거했습니다. 그러나이 문제를 해결하기 위해 CLR 및 디버거 팀이이 문제에 대한 여러 가지 잠재적 인 솔루션을 찾고 있습니다. 불행히도 이것은 Visual Studio 11의 일부가 아닙니다.
답변
Visual Studio 2015와 관련하여 :
Marc Gravell의 현재 답변에 따르면 :
이 기능은 Visual Studio 2013에 추가되었습니다 . 자동차 창에서 반환 값을 보거나 watch / immediate 창에서 $ ReturnValue를 사용할 수 있습니다
그 대답은 또한 Visual Studio 2015에서는이 기능이 작동하지 않는다고 언급했습니다. 이것은 전적으로 사실이 아닙니다. 에 메소드 호출의 반환 값을 검사하여 다음 참고가있다 :
$ ReturnValue 를 인식 하려면 레거시 표현식 평가 기가 켜져 있어야합니다 (도구 / 옵션 / 디버깅 / 레거시 C # 및 VB 표현식 평가 기 사용 ). 그렇지 않으면 $ ReturnValue1을 사용할 수 있습니다 .
Visual Studio 2015 Enterprise에서 이것을 테스트했습니다.
- 레거시 식 평가 기가 꺼져 있으면 $ ReturnValue1 만 작동합니다.
- 레거시 식 평가 기 사용 : $ ReturnValue 및 $ ReturnValue1 모두 작동
답변
메뉴 도구 → 옵션으로 이동하면 , IntelliTrace로 이동하여 이벤트 및 통화 정보를 수집하도록 설정을 변경하십시오.
이전 통화 이벤트 ( Ctrl+ Shift+F11 )로 돌아가서 자동 창에서 메소드 호출에서 리턴 된 임시 값을 메소드 이름의 하위로 볼 수 있습니다.
이것은 현재 사용중인 메소드의 리턴 값을 표시하지 않습니다. 현재 메소드에서 호출 된 마지막 메소드의 리턴 값 만 표시합니다.
그래서 괜찮습니다
DataTable go(){return someTableAdapter.getSomeData();}
에 대한 반환 값을 보여 주므로 someTableAdapter.getSomeData()
.
그러나 아닙니다.
int go(){return 100 * 99;}
답변
.NET 이전의 오래된 트릭 : 레지스터 창을 열고 EAX 레지스터 값을 확인하십시오. 여기에는 마지막으로 호출 된 함수의 반환 값이 포함됩니다.
