|
|
1
3
确保有好的调试符号可用(即使是在嵌入式设备上,也可以使用发行版构建来实现)。您应该能够获得堆栈跟踪,并且希望能够获得一些变量的值。在这一点上,良好的汇编语言知识可能也很有用。 我的经验是,一般来说,这个bug与接近崩溃区域的代码有关。也就是说,如果您看到函数“LoadConfigInfoFromFile”中出现问题,那么您可能应该从仔细分析问题开始,而不是从“DrawControlsOnScreen”开始,如果您知道我的意思的话“远处的恐怖行动”型的虫子并不经常出现(尽管当它们出现时,它们往往是一只大熊)。 |
|
|
2
2
Tracefile总是个好主意。 当涉及到崩溃时,我使用的是adplus,它是windows调试工具的一部分。基本上adplus所做的是,它将windbg附加到您正在监视的可执行文件上。当应用程序崩溃时,会得到一个崩溃转储和一个日志文件。您可以在首选调试器中加载崩溃转储并找出导致崩溃的指令。 与调试版本相比,发布版本版本得到了极大的优化,因此编译代码的方式会影响代码的行为。当多线程代码崩溃发生在发行版而不是调试版时,这基本上是正确的。adplus和windbg帮我找到了事情的真相。 ADPlus解释如下: httx://support.microsoft.com/?scid=kb%3Ben美国%3B286350&x=15&y=12 基本上你要做的是: 一。下载WinDbg并将其安装到C:\调试器中 httx://www.microsoft.com/whdc/devtools/debugging/default.mspx
“adplus.bat-使你的exe.exe崩溃”
|
|
|
3
0
如果只是应用程序的一小部分需要调试,那么您可以更改这些源文件,而不进行优化。假设您为所有生成生成生成调试信息,因此这使应用程序基本上像在发行版中一样运行,但允许您正确调试感兴趣的部分。 |
|
|
4
0
使用跟踪语句怎么样。它们用于释放模式值检查。
|
|
|
5
0
我同意通过日志文件调试来缩小范围。 我使用了“Entering FunctionName”“leving FunctionName”,直到找到它在崩溃前进入的方法为止。然后我添加更多的日志消息重新编译并重新发布。 |
|
|
6
0
除了玩关闭优化和/或打开发布版本的调试信息 pauldoo 说,一个日志文件能很好的帮助数据。我曾经编写过一个“跟踪”应用程序,如果在发布版本启动时应用程序正在运行,它将捕获该应用程序的跟踪日志(否则,如果在调试器下运行,结果将转到调试器的输出窗口)。我可以让最终用户给我发电子邮件,从他们那里复制他们看到的错误日志文件,这是我在至少一个案例中发现问题的唯一方法。 |
|
|
7
0
虽然它在嵌入式环境中可能不可用,但我在 WinDbg 用于调试发布模式的Windows应用程序。即使应用程序不是用符号信息编译的,也至少可以获得可用的堆栈跟踪和大量其他有用的崩溃信息。 |
|
|
9
0
如果问题是与同步相关的转储日志在文件中可能有问题。
|