的TRACE宏当代码被编译可用于输出诊断消息到调试器的调试模式.在发布模式下,我需要相同的消息.有没有办法实现这个目标?
(请不要不浪费你的时间讨论为什么我不应该在发布模式使用TRACE :-)
在我的WCF服务中,当尝试传输大数据时,我经常遇到错误:底层连接已关闭:连接意外关闭
我想知道是什么原因调用此错误,因此我设置了WCF跟踪并可以读取traces.svclog文件.
问题是,我可以在这个文件中看到很多关于进程流的信息,我可以看到出现异常的确切时间,但我看不出确切的原因.是由于MaxReceivedMessageSize还是类似的东西.
是这样trace.svclog不能包含这样的信息或我做错了什么?
如何获得这些信息?
编辑(补充):
从我的服务器端app.config:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="NAVBinding_ICustomer_Service"
closeTimeout="01:50:00"
openTimeout="01:50:00" receiveTimeout="01:50:00" sendTimeout="01:50:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647" messageEncoding="Text"
textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name = "Customer_Service" behaviorConfiguration="returnFaults">
<endpoint name="NAVBinding_ICustomer_Service"
address = "http://localhost:8000/nav/customer"
binding = "basicHttpBinding"
bindingConfiguration= "NAVBinding_ICustomer_Service"
contract = "NAVServiceReference.ICustomer_Service"/>
</service>
</services>
<behaviors>
<serviceBehaviors> …Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi 2010,我想知道是否有一种方法可以跟踪项目中的代码,而无需跟踪调用包含的VCL.
例如 - 您输入一个断点然后使用Shift+ F7来逐行跟踪.现在你在VCL中调用了一些冗长的过程 - 在我的例子中,它通常是一个Measurement Studio或其他组件,用于绘制一堆I/O,OPC或其他位的doodads.无论如何,发生的事情是调试器跳出活动源文件,打开组件源,并逐行跟踪.通常这是我不关心的数百或数千行代码 - 我只想让它执行并返回到MY项目中的下一个源代码行.
显然你可以通过在外部调用的每个实例周围设置断点来实现这一点,但通常有太多不能使其变得切实可行 - 每次我想要逐步执行一段代码时,我会花一小时设置一百个断点.
是否有设置或工具可以做到这一点?允许用户跟踪项目中的代码,同时静默执行项目外部的代码?
这是我的web.config,在IIS7上的应用程序中运行WCF服务,但没有任何内容写入指定的文件.已经为每个人授予了该文件的权限.
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing, error, warning, critical" propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="c:\log\tracestext.log" />
</listeners>
</source>
</sources>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
我可以添加服务引用就好了.
然后我尝试从Windows应用程序调用该服务,几分钟后,在运行Windows应用程序的计算机上出现错误"客户端无法在配置的超时(00:00:00)内完成安全协商.目前的谈判支持是1(00:00:00)."
但绝对没有任何内容写入config中指定的跟踪日志文件.
我还需要做些什么来启用跟踪吗?谢谢你的帮助
编辑:"来源"部分现在匹配此处推荐的部分:http://msdn.microsoft.com/en-us/library/aa702726.aspx
我已将"diagnostics.messagelogging"部分添加到"system.servicemodel"
并且事件查看器显示:"消息记录已打开.敏感信息可能以明文形式记录,即使它已在线路上加密:例如,消息正文.进程名称:w3wp进程ID:1784"
但是日志文件仍然是空的
我一直在使用一个公司的代码库,该公司的策略是编写大量的跟踪日志记录.因此,几乎每个方法都有一段代码,如下所示:
String LOG_METHOD = "nameOfMethod(String,List<Long>):void";
if(logger.isTraceEnabled()) {
Object[] params = new Object[] { string, list };
logger.trace(CompanyMessages.newMethodInstanceMessage(this, LOG_METHOD, params));
}
Run Code Online (Sandbox Code Playgroud)
并以此结束(在finally-clause中或在方法的最后:
if(logger.isTraceEnabled()) {
logger.trace(CompanyMessages.leaveMethodInstanceMessage(this, LOG_METHOD));
}
Run Code Online (Sandbox Code Playgroud)
实际上有更多的代码,但这是基本的想法.这使得代码变得混乱,其他编码人员不断地使用他们自己的解释来搞乱它,这些解释不使用CompanyMessages格式化监视工具要读取的消息所需的特定类.所以我正在寻找一种方法来摆脱上面的所有代码,并提供所有需要跟踪记录的方法,注释如下:@LogBefore('logLevel')&@LogAfter('logLevel').
我选择这个解决方案的原因是为了使其他开发人员不必学习任何新东西,而是使用注释而不是代码.我在一个服务器环境中工作,我们部署了数百个Web应用程序和数十个开发人员.所以我一直在寻找一种在Web应用程序中实现它的方法,而无需额外的编码或额外的大型库.这意味着我正在寻找一个小的,稳定的AOP实现,使用类似于我提出的注释,在每个Web应用程序中易于配置.表现也很重要.用AOP实现这个的最简单的例子是什么?
编辑:我确实找到了与我正在寻找的非常类似的东西,但这有几个问题.必须配置所有需要日志记录的类,这比仅使用注释更耗费资源.弹簧配置会<aop:aspectj-autoproxy/>修复吗?
我确定我错过了一些简单的东西,但我无法让简单的Trace.WriteLine在Azure上工作.
我采取的步骤:
Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString已设置为我们的Azure存储帐户
将模块诊断导入服务定义文件.
Web config:
<system.diagnostics>
<switches>
<add name="logLevel" value="4" />
</switches>
<trace autoflush="false" indentsize="4">
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="AzureDiagnostics">
</add>
</listeners>
</trace>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
WebRole.cs
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
String wadConnectionString = "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString";
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue(wadConnectionString));
RoleInstanceDiagnosticManager roleInstanceDiagnosticManager =
cloudStorageAccount.CreateRoleInstanceDiagnosticManager(
RoleEnvironment.DeploymentId,
RoleEnvironment.CurrentRoleInstance.Role.Name,
RoleEnvironment.CurrentRoleInstance.Id);
DiagnosticMonitorConfiguration diagnosticMonitorConfiguration =
roleInstanceDiagnosticManager.GetCurrentConfiguration();
diagnosticMonitorConfiguration.Directories.ScheduledTransferPeriod =
TimeSpan.FromMinutes(5d);
diagnosticMonitorConfiguration.Logs.ScheduledTransferPeriod =
TimeSpan.FromMinutes(1d);
diagnosticMonitorConfiguration.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
roleInstanceDiagnosticManager.SetCurrentConfiguration
(diagnosticMonitorConfiguration);
Trace.WriteLine("This is the message");
Debug.Write("This is the debug message"); …Run Code Online (Sandbox Code Playgroud) 我需要跟踪read特定文件的系统调用,我目前正在通过解析输出来完成此操作strace.由于read文件描述符工作我必须保持轨道之间的当前映射的fd和path.此外,seek必须进行监控以使跟踪中的当前位置保持最新.
Linux中是否有更好的方法来获取每个应用程序,每个文件路径的IO跟踪?
考虑下面的两个简单的Java类:
第一个例子
class Computer {
Computer() {
System.out.println("Constructor of Computer class.");
}
void On() {
System.out.println("PC turning on...");
}
void working() {
System.out.println("PC working...");
}
void Off() {
System.out.println("PC shuting down...");
}
public static void main(String[] args) {
Computer my = new Computer();
Laptop your = new Laptop();
my.On();
my.working();
your.On();
your.working();
my.Off();
your.Off();
}
}
Run Code Online (Sandbox Code Playgroud)
第二个例子
class Laptop {
Laptop() {
System.out.println("Constructor of Laptop class.");
}
void On() {
System.out.println("Laptop turning on...");
}
void working() {
System.out.println("Laptop working...");
} …Run Code Online (Sandbox Code Playgroud) 找出一种在TKPROF输出中可视化捕获递归调用树的方法(指定SYS = YES).
Oracle Database 11g企业版11.2.0.1.0版 - 64位生产
Windows 7 64位DELL Latitude核心i7 2.8GHz 8G内存和SSD硬盘
我正在尝试理解索引和性能指示的影响,如问题Oacle 11G - 插入时索引的性能影响.
要进一步了解场景背后发生的索引,请在create index语句上运行SQL跟踪.
在索引创建上运行跟踪(SQL到底部)并使用"sys = yes"选项运行tkprof.
SQL> ALTER TABLE TBL2 ADD CONSTRAINT PK_TBL2_COL1 PRIMARY KEY(COL1) ;
Table altered.
Elapsed: 00:00:01.75
> trcsess clientid="CREATE_INDEX" output="report_createindex.trc" *.trc
> tkprof createindex.trc output=createindex.txt sys=yes
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以使用tkprof或其他工具从trace(.trc)文件中捕获调用层次结构,如解释计划.
生成的报告包括递归调用,例如"ALTER TABLE TBL2 ADD",导致"INDEX BUILD UNIQUE",并且可能还有进一步的sys递归调用.我想输出不会反映出调用层次结构(父亲优先,紧随其后的子节点).
TKPROF输出
SQL ID: 2w9c2khpsfj4m
Plan Hash: 3219312727
CREATE UNIQUE INDEX "TRY"."PK_TBL2_COL1" on "TRY"."TBL2"("COL1") NOPARALLEL
call count cpu elapsed disk …Run Code Online (Sandbox Code Playgroud) 在经典的.NET应用程序中,我通过在app.config中添加以下内容来做到这一点:
<system.diagnostics>
<sources>
<source name="System.Net" tracemode="includehex" maxdatasize="1024">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Cache">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Http">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.WebSockets">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
</sources>
<switches>
<add name="System.Net" value="Verbose"/>
<add name="System.Net.Cache" value="Verbose"/>
<add name="System.Net.Http" value="Verbose"/>
<add name="System.Net.Sockets" value="Verbose"/>
<add name="System.Net.WebSockets" value="Verbose"/>
</switches>
<sharedListeners>
<add name="System.Net" type="System.Diagnostics.TextWriterTraceListener" initializeData="network.log"/>
</sharedListeners>
<trace autoflush="true"/>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
我可以在.NET Core控制台应用程序中达到相同的效果吗?特别是,我需要查看在使用NegotiateStream类进行NTLM身份验证期间调用了哪些WinAPI函数(以及传递了哪些参数)。
到目前为止,我发现的主要是关于在ASP.NET Core应用程序中记录Web API。我的应用程序不是ASP.NET,也不使用任何Web API。
trace ×10
java ×2
wcf ×2
.net ×1
.net-core ×1
annotations ×1
aspects ×1
azure ×1
c# ×1
call ×1
connection ×1
debugging ×1
delphi ×1
delphi-2010 ×1
file-io ×1
filesystems ×1
linux ×1
logging ×1
macros ×1
methods ×1
mfc ×1
oracle ×1
oracle11g ×1
oracle11gr2 ×1
project ×1
recursion ×1
strace ×1
web-services ×1