使用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&):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&):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,如果我更改顺序,消息本身根本就不会出现。
据我所知,当onResult="true“时,ref应该出现,因为该事件要等到方法返回后才计算。如果在onResult="false“数据查询中使用相同的参数,则在该方法可能设置值之前对其进行计算。
我做错了什么?
发布于 2016-08-26 07:33:49
据我所知你不能做你想做的事。在过去,我曾尝试过做过几次同样的事情,但都没有成功。然而,问题并不在于ref参数。它也不会与“正常”参数一起工作。
如果使用onReturn="true",则只能引用从方法(即index="-1" )返回的值。在这种情况下,不能读取参数的值。这是由于IntelliTrace是如何在引擎盖下工作的,我不知道如何解决这个问题。
可编程数据查询也不会有帮助。PDQ有两种实现方法:
object[] EntryQuery(object thisArg, object[] args)object[] ExitQuery(object returnValue)第一个调用用于分析输入参数(onReturn="false"),第二个调用用于分析返回值(onReturn="false")。同样,在ExitQuery中,您只能访问一个返回值。
https://stackoverflow.com/questions/39128665
复制相似问题