C# “我如何调试?”;对象引用未设置为对象的实例;2013年?

C# “我如何调试?”;对象引用未设置为对象的实例;2013年?,c#,asp.net,visual-studio,azure,C#,Asp.net,Visual Studio,Azure,我有一个c#Azure项目,它只是一个web api,并且希望删除一些非api默认组件(欢迎页面、帮助等)。这样做之后,在启动应用程序时,我会收到一条错误消息“Object reference not set to a instance of a Object.”我以前在Azure中做事情时看到过这一点,每次都会以某种方式绕过它们。我的问题是:我如何自己调试这个错误?这个错误描述非常缺乏细节(没有调用堆栈或任何东西,好像应用程序还没有启动,对话框是模态的,所以我不能在VS中单击任何东西) 附加说

我有一个c#Azure项目,它只是一个web api,并且希望删除一些非api默认组件(欢迎页面、帮助等)。这样做之后,在启动应用程序时,我会收到一条错误消息“Object reference not set to a instance of a Object.”我以前在Azure中做事情时看到过这一点,每次都会以某种方式绕过它们。我的问题是:我如何自己调试这个错误?这个错误描述非常缺乏细节(没有调用堆栈或任何东西,好像应用程序还没有启动,对话框是模态的,所以我不能在VS中单击任何东西)

附加说明:

  • 这是一个ASP.NET项目
  • 一旦我发布到Azure,它就会工作
  • 在完全复制并重建项目后,它似乎起了作用。然后,当处理NuGet依赖项时,我们又回到了它不起作用的状态(我尝试过删除我的packages文件夹并让NuGet重新创建—没有运气;根本不知道是否与NuGet相关)
  • 我重新复制了该项目,因此只需使用相同版本的VS重新打开“MySolutionFolder”->“MySolutionFolder-Copy”即可正常运行。这显然是一个令人惊讶的草率解决方案,所以要寻找更好的解决方案

如评论中所述,该问题可能涉及对各种文件的访问权限,很可能与NuGet相关,但也可能与Azure有关,这解释了为什么复制到新的解决方案目录“修复”了该问题。我希望看到更好的错误信息,比如“错误:VisualStudio无法写入‘packages.config’”,所以我知道在哪里可以解决这类问题。现在,它就像一个编译错误,上面写着“代码中的语法错误。在某处。祝你好运找到它”。

勾选调试>异常>公共语言运行时异常>系统>NullReferenceException并运行你的应用程序

你可以通过日志进行调试。就像你可以检查诊断日志一样。通过代码启用它们。它有一些配置。我也面临着这类问题,这对我来说很难追踪。因此,我在自定义检查点上启用了诊断日志和写日志。

您可以启用Intellitrace并远程调试azure服务:


您可以设置本地Azure emulator,这就是我调试云应用程序的方式

也许还可以读点书! 在global.asax中:

protected void Application_Error(object sender, EventArgs e)
{
    var error = Server.GetLastError();
    string message = error.Message;
    string callStack = error.StackTrace();  
    //Write message and callStack to file
    ...
}

我在asp.net应用程序启动周期的早期(调试程序连接之前)出现问题时也看到过类似的症状

我以前使用过一种变通方法:

  • 确保您正在使用本地IIS实例而不是IIS Express进行调试(右键单击项目属性->Web->服务器下拉菜单->本地IIS)
  • 点击F5并获得错误对话框。(只是为了确保IIS进程已启动)。关闭错误对话框
  • 调试->附加到进程->附加到w3wp.exe(iis进程)。如果不存在该进程,请确保同时选中“显示来自所有用户/会话的进程”
  • 通过更改web.config文件强制重新启动应用程序

  • 现在,重新启动将在调试器从一开始就连接到进程的情况下进行。如果这没有提供任何有用的信息,请查看关闭“仅我的代码”调试异常/断点处理并重复。不幸的是,我从来没有发现过一种更通用的方法来调试此类问题。我最终成功了我绕过这个问题,然后看到它再次弹出;根据其他人在另一个论坛上尝试的建议,我删除了我的packages文件夹,并让NuGet重新创建它,无论出于何种原因,它都纠正了这个问题

    另一次,来自的解决方案起作用(删除并重新添加所有角色);有时这似乎需要重新安装Azure SDK并重新启动计算机

    编辑

    最后,我能找到的最佳解决方案是:删除SUO文件并重新启动VS


    希望这个解决方案将来能帮助有类似问题的人!

    我认为调试在这种情况下不会有帮助

    然而,通过右键单击卸载/重新加载Azure项目可能会解决此问题。在发现此问题之前,我尝试了很多方法


    如前所述。

    我在启动Compute Emulator时也遇到了“对象引用未设置”问题。我发现以管理员身份运行VS解决了这个问题。

    将项目目标更改为4.6.1。似乎对我有效。

    对于Visual Studio 2019,请单击菜单“调试>Windows>异常设置”

    在公共语言运行时异常下,勾选System.NullReferenceException
    。调试器将在捕获此异常时中断


    你能发布一些东西让我们看看发生了什么吗?这实际上只是我描述的——一个包含上述文本的错误框,然后什么都没有。这就像调试按钮直接链接到“Modal.Show”(“error”);exit的代码一样“-没有任何迹象表明应用程序试图在allAlmost启动,这听起来像VS error,而不是你的应用程序。可能需要查看Windows事件日志…尝试一下-已经选择了一个(用户处理框)。我也尝试过“抛出”,没有骰子。尝试过选择所有“抛出”框,还有nada。@Rollie,你确定你的调试器附带了正确的调试引擎吗?选中“调试/附加到进程”对话。我实际上是从VS中的调试运行的,如前所述,在将解决方案复制到新目录后,此调试过程可以正常工作。我可能发现了问题(访问权限),但这里的问题不是“如何使其运行”,而是“如何自己调试它,这样我就不必再问了”。我想要的答案是“哦,如果您在安装目录中运行VisualStudioInternalErrorViewer.exe,您可以更详细地看到VS本身发生的错误”,或者诸如此类的情况。在这种情况下,我更感兴趣的是我可以做些什么来诊断和解决问题