문제

여기 내가 아는 것이 아마도 가능하지만 결코 관리하지 못했습니다.
VS2005 (C ++)에서 디버깅하는 동안 디버깅하는 코드에서 함수를 호출 할 수 있습니다.
이 기능은 시계 창의 일반적인 기능만으로 쉽게 탐색 할 수없는 복잡한 데이터 구조를 디버깅 할 때 때때로 필수적입니다.
시계 창은 작문 기능 호출을 허용하는 것처럼 보이지만 시도 할 때마다 하나의 오류 또는 다른 오류가 발생합니다.

Error: symbol "func" not found
Error: argument list does not match function
Error: member function not present

이 작업을 올바르게 만드는 데 성공한 사람이 있습니까? 내가 여기서 무엇을 놓치고 있습니까?

편집하다: 분명히, 호출 된 함수는 디버거가있는 현재 범위에 존재하는 기호 여야합니다.

도움이 되었습니까?

해결책

좋아, 여기 내가 찾은 것이있다
CXX0040은 "The C expression evaluator does not support implicit conversions involving constructor calls."
CXX0047은 "Overloaded functions can be called only if there is an exact parameter match or a match that does not require the construction of an object."

따라서 결합 된 기능을 호출하려면 인수 중 어느 것도 암시적인 변환이 없으며 논쟁이 건설이 필요하지 않다는 것을 의미합니다.
이 맥락에서 "암시 적 전환"에는 변환과 같은 사소한 것들이 포함 된 것 같습니다. 'String' 에게 'const String&'.
"건축"에는 사소한 카피 건설이 포함 된 것 같습니다. 따라서 가치로 전달하면 원시 유형이 아닌 모든 것이 오류가 발생합니다.

따라서 이것은 기본적으로 원시 유형이나 포인터 만 사용하는 기능을 남깁니다.
방금이 이론을 성공적으로 테스트했습니다.

따라서 시계 창에서 메소드를 호출하려면 포인터와 프리미티브 만 사용하는 오버로드를 추가하고 시계 창에 인수를 적절하게 전달하십시오. 원시가 아닌 객체를 통과하려면 주소를 통과합니다.

다른 팁

시계 창은 현재 코드가 현재 코드가 함수에 들어가고 현재 함수의 범위에서 숨겨진 다른 기능에 액세스하려고 시도하는 컨텍스트에 따라 제한되어 작동하지 않습니다.

시계 창에서 함수를 호출하는 경우 현재 범위에서 볼 수 있고 액세스 할 수 있는지 확인하십시오.

내가 아는 한, 당신은 관리되지 않은 C ++를 디버깅하는 동안 시계 창에서 코드를 실행할 수 없습니다. 이것은 C# (그리고 아마도 vb.net 및 관리 된 C ++에서 작동하지만 긍정적 인 것은 아닙니다). 따라서 일부 언어에는 효과가 있지만 다른 언어는 작동하지 않기 때문에 가능할 것입니다.

우리는 이것이 매우 인기 있고 놓친 방식으로 작동합니다. 매우 간단한 기능 (회원 기능 포함) 작업, 일반적으로 간단한 속성 getters. 다른보다 복잡한 기능은 작동하지 않으며 오류가 발생합니다.

나는 정확한 규칙을 분별할 수 없었습니다 ...

나는 이것을 테스트하지 않았지만, 항상 그것이 바로 바로 창의 것이었던 것이라고 생각했습니다 (코드 실행).

카메론

원하는 "즉각적인"창입니다. 그리고 당신은 현재 중단 점이있는 곳에서 볼 수있는 것으로 제한됩니다. 로컬 변수 및 해당 클래스 (또는 글로벌)의 기능

내 경험에 따르면, 바로 창문과 몇 가지 단점이 있습니다. 클래스가 다른 DLL에서 나오는 경우 클래스의 회원 기능을 호출 할 수는 없지만 오류 오류 메시지를 오도하십시오. 동일한 DLL에있는 것이 있으면 (예 : 다른 모든 것들에 정적으로 연결함으로써) 멤버를 호출하는 것은 상당히 신뢰할 수 있습니다. 그러나 복잡한 것들은 다른 사람들이 언급했듯이 효과가 있거나 작동하지 않을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top