C# visualstudio发布应用程序中的调试
我有一个应用程序的发布版本(需要一些批处理文件才能安装和运行)。我随身带着一份源代码。为了查看每个事件的路径(了解程序),我现在正在安装应用程序,同时构建源代码,然后将所有DLL和PDB(以便调试器可以映射到我的代码)从调试文件夹复制到程序文件,然后运行应用程序。由于我在源代码中放置了diagnostics.debugger.launch,所以我能够调试我的版本。C# visualstudio发布应用程序中的调试,c#,debugging,visual-studio-2012,C#,Debugging,Visual Studio 2012,我有一个应用程序的发布版本(需要一些批处理文件才能安装和运行)。我随身带着一份源代码。为了查看每个事件的路径(了解程序),我现在正在安装应用程序,同时构建源代码,然后将所有DLL和PDB(以便调试器可以映射到我的代码)从调试文件夹复制到程序文件,然后运行应用程序。由于我在源代码中放置了diagnostics.debugger.launch,所以我能够调试我的版本。 我这样做是因为,我无法直接从bin\debug执行和测试项目,因为它有一些依赖项(批处理文件参数),因此我安装的是已发布的版本。我必
我这样做是因为,我无法直接从bin\debug执行和测试项目,因为它有一些依赖项(批处理文件参数),因此我安装的是已发布的版本。我必须找出代码中的每个事件路径(因为我是这家公司和.NET的新手)。有没有更简单的方法(比如intellitrace…这对我的情况有帮助吗?)谢谢。欢迎使用SO!更多的信息会有所帮助。程序在做什么,你想解决什么问题,等等 至于跟踪执行路径,有很多方法可以实现您想要的。以下是几点建议:
- 记录启动输入,并使用这些输入在开发环境中调试程序。可能无法根据其他外部依赖项工作
- 将每个方法的条目记录到一个文件中。这将让您看到执行路径。这对于实现旧式的方法来说是非常俗气的,但是您可以使用免费版本的来编写一次日志代码,并根据需要在给定的方法上重用它
- 使用一个仪器平台来了解正在发生的事情
- 使用跟踪侦听器跟踪事件执行。查看Trace.Listeners.Add()。创建侦听器后,可以调用Trace.Write或Trace.WriteLine向跟踪添加信息。这涉及到大量手动将跟踪信息输入到方法中,但如果您感到绝望,您可以这样做。我更喜欢像PostSharp这样的面向方面的解决方案,但无论出于何种原因,您可能没有这种选择
输入traceMe一次
做一些工作。
输入tracemeagain
做一些工作。
再次退出TraceMeet
ExitingTraceMeOnce
包装纸欢迎来到SO!你能澄清你所说的“找出每一条执行路径”是什么意思吗?这是给你的任务吗?或者你这样做是为了更熟悉软件?您是否正在尝试确定应用程序的性能?请与团队成员交谈,他们已经知道如何调试应用程序。我们没有。不要羞于向你的团队成员寻求帮助,他们希望你尽快跟上进度。寻求他们的帮助并不会让你显得无能,反而会让你显得渴望学习并成为团队中一名有效的成员。那是件好事,谢谢你接受。我很想知道更多关于你的问题和你最终采取的方法。如果您有时间,请告诉我们。
using System.Diagnostics;
using System.IO;
namespace TrackingExecutionPath
{
internal class Program
{
private static void Main(string[] args)
{
var myFile = File.Create(@"C:\Application.log");
Trace.Listeners.Add(new TextWriterTraceListener(myFile));
Trace.WriteLine("Starting up");
var tracer = new Tracer();
tracer.TraceMeOnce();
Trace.WriteLine("Wrapping up");
Trace.Flush();
}
}
internal class Tracer
{
public void TraceMeAgain()
{
Trace.IndentLevel++;
Trace.WriteLine("Entering TraceMeAgain");
Trace.WriteLine("Doing some work.");
Trace.WriteLine("Exiting TraceMeAgain");
Trace.IndentLevel--;
}
public void TraceMeOnce()
{
Trace.IndentLevel++;
Trace.WriteLine("Entering TraceMeOnce");
Trace.WriteLine("Doing some work.");
TraceMeAgain();
Trace.WriteLine("Exiting TraceMeOnce");
Trace.IndentLevel--;
}
}
}