我确定之前发生过这种情况,有些东西在调试模式下工作,你在发布版中编译,有些东西会中断。
在使用嵌入式XP环境时发生这种情况,我发现这样做的最好方法就是编写一个日志文件来确定它出错的地方。
您尝试解决恼人的发布模式错误的经验/发现有哪些?
答案 0 :(得分:3)
确保您有可用的良好调试符号(即使在嵌入式设备上,即使使用发布版本也可以执行此操作)。您应该能够获得堆栈跟踪,并希望获得一些变量的值。在这一点上,熟悉汇编语言可能也很有用。
我的经验是,错误通常与破损区域附近的代码有关。也就是说,如果你看到函数“LoadConfigInfoFromFile”中出现问题,那么你可能应该首先仔细分析问题,而不是“DrawControlsOnScreen”,如果你知道我的意思。 “远距离的怪异行为”类型的错误往往不会经常出现(虽然他们这样做,他们往往是一个主要的熊)。
答案 1 :(得分:2)
Tracefile总是一个好主意。 当它是关于崩溃时,我正在使用adplus,这是Windows调试工具的一部分。基本上adplus所做的是,它将windbg附加到您正在监视的可执行文件上。当应用程序崩溃时,您会收到崩溃转储和日志文件。您可以在首选调试器中加载故障转储,并找出导致崩溃的指令。
由于与调试版本相比,版本构建得到了大量优化,因此编译代码的方式会影响其行为。当多线程代码中的崩溃发生在发行版本而不是调试版本时,这基本上是正确的。 adplus和windbg帮助我找到了发生的事情。
这里解释了ADPlus: ?httx://support.microsoft.com/ SCID = KB%3Ben-我们%3B286350&安培; X = 15&安培; Y = 12
基本上你要做的是: 1.下载WinDbg并将其安装到C:\ debuggers中 httx://www.microsoft.com/whdc/devtools/debugging/default.mspx
启动您的申请
打开cmd并cd到c:\ debuggers
像这样开始adplus:
“adplus.bat -crash your_exe.exe”
重现崩溃
分析vs2005或windbg中的crashdump
答案 2 :(得分:0)
如果它只是需要调试的应用程序的一小部分,那么您可以更改这些源文件,只是在没有优化的情况下构建。据推测,您可以为所有构建生成调试信息,因此这使得应用程序主要像在发布时一样运行,但允许您正确调试有趣的部分。
答案 3 :(得分:0)
如何使用Trace语句。它们用于释放模式值检查。
Trace.WriteLine(myVar);
答案 4 :(得分:0)
我同意日志文件调试以缩小范围。
我使用了“输入FunctionName”“Leaving FunctionName”,直到我找到崩溃前输入的方法。然后我添加更多日志消息重新编译并重新发布。
答案 5 :(得分:0)
除了关闭优化和/或为pauldoo所述的版本构建打开调试信息之外,还有一个日志文件可以提供良好的数据。我曾经写过一个“跟踪”应用程序,如果它在发布版本启动时运行,它将捕获应用程序的跟踪日志(否则,如果在调试器下运行,结果将转到调试器的输出窗口)。我能够让最终用户通过电子邮件向我发送日志文件,再现他们看到的错误,这是我在至少一个案例中找到问题的唯一方法。
答案 6 :(得分:0)
虽然它可能在嵌入式环境中无法使用,但我对WinDbg用于调试发布模式Windows应用程序感到非常幸运。即使应用程序没有使用符号信息进行编译,您至少可以获得可用的堆栈跟踪和大量其他有用的崩溃信息。
答案 7 :(得分:0)
您也可以将调试符号复制到生产环境,即使它是以重新模式编译的
Here是一篇包含更多信息的文章
答案 8 :(得分:0)
如果问题是同步相关的文件中的转储日志可能会有问题 在这种情况下,我通常会使用一些大的字符串数组,并在问题再现后将其转储到屏幕/文件中 这当然取决于你的内存限制,如果平台上的内存有限,有时我只使用几个符号和数字来存储在数组中。阅读这些日志并不是一件大事,但有时这是唯一的选择。