我使用的是Visual Studio 2010专业版和Windows Vista.
首先,我有这个代码.如你所见,它会使程序崩溃!
using System;
namespace Crash
{
class Program
{
static void Main(string[] args)
{
string a = null;
if (a.Length == 12)
{
// ^^ Crash
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该程序将在if语句中崩溃.现在,我想知道它在if语句中崩溃了.
如果我从Visual Studio"开始没有调试",Crash.exe崩溃.它使用1,356kb的内存.我得到了Close Program/Debug的Vista选项.如果我选择Debug,我可以打开一个新的Visual Studio实例,它指向if语句的NullReferenceException.这很好.
现在让我假设它在另一台计算机上崩溃了,我让他们通过任务管理器给我一个转储文件.它是54,567kb.为什么这么大!这是巨大的!无论如何,我对此不太感兴趣(略)
如果我用Windbg打开那个转储,我对未经训练的眼睛几乎没有用处:
Microsoft (R) Windows Debugger Version 6.12.0002.633 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\Users\Richard\Desktop\Crash.DMP]
User Mini Dump File with Full Memory: Only application data is available
Symbol search path is: SRV*C:\SYMBOLS*http://msdl.microsoft.com/download/symbols
Executable search path is: …Run Code Online (Sandbox Code Playgroud) 在我的源代码中,我一直非常小心地使用Unicode,总是调用WinAPI函数的宽版本,在我的转换中非常小心等等,以支持我的程序的许多用户使用非英文版本的Windows.
但是错误渐渐蔓延,我相信你们都能理解.我最近遇到程序崩溃,在我的代码中只有一个地方,我调用了函数"isspace"而不是"iswspace".
是否有一些工具允许我扫描我的所有ANSI函数调用的源代码,希望找到可能存在的更多错误?
谢谢.
我写的是中小型应用程序,其中很多都是我发布到Internet上的.希望一切顺利,但如果发生一些不可思议的可怕灾难,我会悄悄提交该报告吗?
我可以尽一切努力删除帐户名称,我可能只会收集异常文本.
当然用户不知道刚被发送的东西不能伤害他们,或者我和我的程序.
到目前为止,用户必须手动向我报告错误,但如果可以的话,我想摆脱这个问题,我只想知道你是否认为我可以逃脱这个,以及你们做了什么.
非常感谢提前!