2016-08-24 3 views
0

IntelliTrace를 사용하여 메서드로 참조로 전달 된 문자열의 출력과 같은 이벤트 (또는 모든 경우)의 메서드 결과를 볼 수 없습니다.참조로 IntelliTrace 인수

방법 예 :

public bool ByReferenceTestMethod(System.ArgumentNullException exception, ref string referenceArgument) 
{ 
    referenceArgument = string.Format("referenceArgument{0}", exception.Message); 
    return true; 
} 

collectionplan.xml 예 참조 인수 참조없이 작동 : 기준 인자를 참조하여 작동하지

<DiagnosticEventSpecification> 
    <CategoryId>stackoverflow.test.application</CategoryId> 
    <SettingsName _locID="settingsName.Test.Application.Reference">VerifyIDFromBackEnd called</SettingsName> 
    <SettingsDescription _locID="settingsDescription.Test.Application.Reference">VerifyIDFromBackEnd was called</SettingsDescription> 
    <Bindings> 
     <Binding onReturn="false"> 
      <ModuleSpecificationId>stackoverflow.test.application</ModuleSpecificationId> 
      <MethodName>ByReferenceTestMethod</MethodName> 
      <MethodId>Test.Application.TestClass.ByReferenceTestMethod(System.ArgumentException,System.String&amp;):System.Boolean</MethodId> 
      <ShortDescription _locID="shortDescription.Test.Application.Reference.called">Method 'ByReferenceTestMethod' called</ShortDescription> 
      <LongDescription _locID="longDescription.Test.Application.Reference.called">ByReferenceTestMethod called with ArgumentException parameter name "{0}" and message "{1}"</LongDescription> 
      <TypeName>Test.Application.TestClass</TypeName> 
      <DataQueries> 
       <DataQuery index="1" maxSize="2048" type="String" name="Exception parameter" _locID="dataquery.Test.Application.Reference.exception.Paramname" query="m_paramName" /> 
       <DataQuery index="1" maxSize="2048" type="String" name="Exception message" _locID="dataquery.Test.Application.Reference.exc5eption.Message" _locAttrData="name" query="_message" /> 
     </DataQueries> 
     </Binding> 
     <Binding onReturn="true"> 
      <ModuleSpecificationId>stackoverflow.test.application</ModuleSpecificationId> 
      <MethodName>ByReferenceTestMethod</MethodName> 
      <MethodId>Test.Application.TestClass.ByReferenceTestMethod(System.Exception,System.String&amp;):System.Boolean</MethodId> 
      <ShortDescription _locID="shortDescription.Test.Application.Reference.result">Method 'ByReferenceTestMethod' completed</ShortDescription> 
      <LongDescription _locID="longDescription.Test.Application.Reference.result">ByReferenceTestMethod returned result "{0}" with an unknown referenceArgument</LongDescription> 
      <TypeName>Test.Application.TestClass</TypeName> 
      <DataQueries> 
       <DataQuery index="-1" maxSize="0" type="Boolean" name="Reference Result" _locID="dataquery.Test.Application.Reference.result" _locAttrData="name" query="" /> 
      </DataQueries> 
     </Binding> 
    </Bindings> 
</DiagnosticEventSpecification> 

collectionplan.xml 예 :

<LongDescription _locID="longDescription.Test.Application.Reference.result">ByReferenceTestMethod returned result "{0}" with referenceArgument "{1}"</LongDescription> 
<TypeName>Test.Application.TestClass</TypeName> 
<DataQueries> 
    <DataQuery index="-1" maxSize="0" type="Boolean" name="Reference Result" _locID="dataquery.Test.Application.Reference.result" _locAttrData="name" query="" /> 
    <DataQuery index="2" maxSize="4096" type="String" name="referenceArgument" _locID="dataquery.Test.Application.Reference.Reference.Value" _locAttrData="name" query="" /> 
</DataQueries> 

이것 해결 된 마커가없는 LongDescription을 보여줍니다. 메시지 자체가 전혀 나타나지 않는 순서를 지정하십시오.

내가 이해할 때, 메서드가 반환 될 때까지 해당 이벤트가 평가되지 않으므로 ref는 onResult = "true"일 때 표시되어야합니다. onResult = "false"데이터 쿼리에서 동일한 인수를 사용하면 메서드에 의해 값이 설정되기 전에 평가됩니다.

내가 뭘 잘못하고 있니?

답변

1

나는 당신이 원하는 것을 할 수 없다는 것을 알고 있습니다. 나는 과거에 몇 번이나 똑같은 일을 시도했으나 효과가 없었습니다. 그러나 문제는 ref 매개 변수가 아닙니다. 또한 "정상적인"매개 변수로는 작동하지 않습니다.

onReturn="true"을 사용하는 경우 메서드에서 반환 된 값, 즉 index="-1" 만 참조 할 수 있습니다. 이 경우 매개 변수 값을 읽을 수 없습니다. 이것은 IntelliTrace가 어떻게 작동하는지에 기인하며 해결 방법을 알지 못합니다.

프로그래밍 가능한 데이터 쿼리도 도움이되지 않습니다. 첫번째는 입력 파라미터 (onReturn="false") 및 반환 값을 분석 할 수있는 두 번째 (onReturn="false")을 분석하기 위해 호출된다

  • object[] EntryQuery(object thisArg, object[] args)
  • object[] ExitQuery(object returnValue)

: PDQ 구현하는 두 가지 방법이있다. 다시 말하지만, ExitQuery에서는 반환 값만 액세스 할 수 있습니다.