2008-08-28 114 views
7

我确定这发生在人们面前,某些东西在调试模式下工作,在发布版中编译,并且某些事情中断。调试发布模式应用程序的最佳方式

在嵌入式XP环境下工作时发生了这种情况,我发现最好的方法是编写一个日志文件以确定它会出错的位置。

你有什么经验/发现试图解决恼人的发布模式错误?

回答

0

如果它只是需要调试的应用程序的一小部分,那么您可以只更改那些源文件而不进行优化。据推测,您可以为所有构建生成调试信息,因此这会使应用程序大部分与发布时一样运行,但可以让您正确调试有趣的部分。

0

如何使用Trace语句。他们在那里进行发布模式值检查。

Trace.WriteLine(myVar); 
3

请确保您有良好的调试符号可用(甚至在嵌入式设备上即使使用发布版本也可以这样做)。你应该能够获得堆栈跟踪,并希望得到一些变量的值。汇编语言的良好知识在这一点上可能也很有用。

我的经验是,通常这个错误与破损区域附近的代码有关。也就是说,如果你看到函数“LoadConfigInfoFromFile”中出现的问题,那么你可能应该先从密切分析问题开始,而不是“DrawControlsOnScreen”,如果你明白我的意思。 “远程幽灵般的行为”类型的错误往往不会经常出现(虽然他们这样做,他们往往是一个主要的熊)。

0

我同意日志文件调试以缩小范围。

我已经使用“输入函数名”“离开函数名”,直到我可以找到它在崩溃前进入的方法。然后我添加更多的日志消息重新编译并重新发布。

0

除了玩关闭优化和/或打开你的发布版本的调试信息,因为pauldoo说,一个日志文件将有利于数据。我曾经编写过一个“跟踪”应用程序,它可以捕获应用程序的跟踪日志,如果该应用程序在发布版本开始运行时运行(否则结果将在调试器下运行时进入调试器的输出窗口)。我能够让最终用户通过电子邮件向我发送日志文件,以再现他们所看到的错误,这是我至少在一种情况下发现问题的唯一方法。

0

虽然它可能在嵌入式环境中无法使用,但我在运行WinDbg以调试发布模式的Windows应用程序方面运气不错。即使应用程序没有使用符号信息进行编译,您至少可以获得可用的堆栈跟踪以及大量其他有用的崩溃信息。

0

您也可以将您的调试符号复制到即使在RELASE模式已经编译生产环境

Here的更多信息

0

如果你的问题是同步相关倾销日志文件中的文章可能有问题。
在这种情况下,我通常会使用一些大的字符串数组并在问题重现后将其转储到屏幕/文件。
这当然取决于你的内存限制,有时候如果平台上的内存有限,我只用几个符号和数字来存储数组。阅读这些日志并不是一件大好事,但有时这是唯一的选择。

2

Tracefile总是一个好主意。 当它是关于崩溃时,我使用adplus,这是Windows调试工具的一部分。基本上adplus做的是,它将windbg附加到您正在监控的可执行文件。当应用程序崩溃时,您会收到故障转储和日志文件。您可以将崩溃转储加载到您首选的调试器中,并查明哪条指令导致崩溃。

由于发布版本与调试版本相比经过了大量优化,所以编译代码的方式会影响其行为。这基本上是在发布版本中发生多线程代码崩溃时发生的,而不是调试版本。 adplus和windbg帮助我找出发生的地方。

ADPlus的在这里解释: httx://support.microsoft.com/ SCID = KB%3Ben美%3B286350 & X = 15 & Y = 12

基本上你需要做的是: 1.下载并安装的WinDbg到C:\调试器 httx://www.microsoft.com/whdc/devtools/debugging/default.mspx

  • 启动应用程序

  • 打开一个cmd和CD到c:\调试器

  • 启动ADPlus这样的:

  • “adplus.bat -crash your_exe.exe”

  • 重现崩溃

  • 分析故障转储在VS2005或在WinDbg中

  • 相关问题