如果我在我的代码中散布了这些:
MessageBox.Show("See a format exception yet? #1");//todo: remove
(其中有7个,从1..7开始编号,大部分显示(1,2,5,6,7))
我最终得到一个错误消息(“异常:找不到表 0 位置:frmFunction.SetPlatypus ”)
如果我注释掉所有这些,我最终会得到一个不同的错误消息(“异常:FormatException Location frmFunction.getDuckbillRecord ”)
这怎么可能?这样的信息 msg 的存在/显示不应该对代码执行的方式/它所采用的路径等没有影响吗?
注意:getDuckbillRecord() 是所有 MessageBox 所在的位置。
更新
以 RT 的建议为动力,我想出了这个:
public static StringBuilder LogMsgs = new StringBuilder();
public static void ExceptionHandler(Exception ex, string location)
{
try
{
LogMsgs.Append(string.Format("{0}\r\n", ex.Message)); //TODO: Comment out before deploying?
DateTime dt = DateTime.Now;
string timeAsStr = string.Format("{0}_{1}_{2}_{3}.txt", dt.Hour, dt.Minute, dt.Second, dt.Millisecond);
using (StreamWriter file = new StreamWriter(timeAsStr))
{
file.WriteLine(LogMsgs.ToString());
}
. . .
//in the problematic code, replacing the MessageBox.Show() calls:
TTBT.LogMsgs.Append("Made it to location 1 in frmOverFunction.GetDuckbillRecord()\r\n");
...而且它确实有帮助 - 在 7 个“代码航路点”中的第一个之后就出现了异常,所以显然在那个特定的丹麦有些东西已经腐烂了。
更新 2
在能够运行应用程序而不会在某处崩溃的罕见经验之后,我意识到我还需要在主窗体的 OnClosing() 事件中编写文件代码——在全局异常处理程序中已经工作了一段时间——我没想到我猜,该应用程序的干净终止将再次发生。