我经常看到即时调试器窗口,并且通常没有显示任何消息,但有时我看不到整个异常,这可能很有用。
当我尝试运行调试器时,我总是收到另一个调试器已经连接的错误,这导致我无处可去。窗口不可调整大小且无法复制文本。
我在 VS 2010 + C# + Silverlight 中开发,它在通过 VS 运行时发生。
有什么见解吗?
我经常看到即时调试器窗口,并且通常没有显示任何消息,但有时我看不到整个异常,这可能很有用。
当我尝试运行调试器时,我总是收到另一个调试器已经连接的错误,这导致我无处可去。窗口不可调整大小且无法复制文本。
我在 VS 2010 + C# + Silverlight 中开发,它在通过 VS 运行时发生。
有什么见解吗?
您会得到“另一个调试器已连接”,因为您已经处于调试模式并且您的浏览器进程已附加到您的代码。
首先,在 App.xaml 中处理全局异常
其次,在您的浏览器中打开开发人员检查器。(大多数浏览器为 F12)和观察控制台。
使用 System.IO;// FileNotFoundException using System.Windows; // 应用程序、StartupEventArgs、ApplicationUnhandledExceptionEventArgs
namespace SilverlightApplication
{
public partial class App : Application
{
public App()
{
this.Startup += this.Application_Startup;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new Page();
}
private void Application_UnhandledException(object sender,
ApplicationUnhandledExceptionEventArgs e)
{
if (e.ExceptionObject is FileNotFoundException)
{
// Inform the user
// Recover from the error
e.Handled = true;
return;
}
// Exception is unrecoverable so stop the application and allow the
// Silverlight plug-in control to detect and process the exception.
}
}
}
其次,在您的浏览器中打开开发人员检查器。(大多数浏览器为 F12)和观察控制台。该消息来自您的 xap 托管的 index.aspx。有一个silverlighterror js函数响应它。
function onSilverlightError(sender, args) {
var appSource = "";
if (sender != null && sender != 0) {
appSource = sender.getHost().Source;
}
var errorType = args.ErrorType;
var iErrorCode = args.ErrorCode;
if (errorType == "ImageError" || errorType == "MediaError") {
return;
}
var errMsg = "Unhandled Error in Silverlight Application " + appSource + "\n" ;
errMsg += "Code: "+ iErrorCode + " \n";
errMsg += "Category: " + errorType + " \n";
errMsg += "Message: " + args.ErrorMessage + " \n";
if (errorType == "ParserError") {
errMsg += "File: " + args.xamlFile + " \n";
errMsg += "Line: " + args.lineNumber + " \n";
errMsg += "Position: " + args.charPosition + " \n";
}
else if (errorType == "RuntimeError") {
if (args.lineNumber != 0) {
errMsg += "Line: " + args.lineNumber + " \n";
errMsg += "Position: " + args.charPosition + " \n";
}
errMsg += "MethodName: " + args.methodName + " \n";
}
throw new Error(errMsg);
}
最后,始终确保(如果存在)在您的 Web 项目的设置中。在 Web 部分中,有一个用于调试的 Silverlight 复选框。必须检查调试附件。
另一个线索: 在 VS Ctrl + Alt + E 中,然后选择 CLR exceptions ,当您启动时,您将获得有关错误的更多详细信息。但是在准确发生错误的地方进行。因为它有时会给出非错误,但会被调试器捕获。
希望有所帮助!