English 中文(简体)
统一调试
原标题:Debugging with unity

目前,我正在打开Unity,双击我编写的其中一个脚本,然后打开MonoDevelopMonoDevelopI doRun>>;使用>;跑步>;Unity调试器

打开Unity后,当我按下Unity中的播放按钮时,调试会话开始。但只有一次。如果我在UnityMonoDevelopRun>>>Run with>>>Unity Debugger将打开Unity,如果Unity已经打开,我会收到错误,说一次只能打开一个Unity实例)。

What I m asking is:
Is there any better workflow which would free me from this tedious switching on and off Unity, and every time I stop debugging session I would just start normally without doing these tedious repetitions?

问题回答

在MonoDevelop的调试菜单中使用Attach;您应该能够以这种方式连接到正在运行的Unity进程。(您可能需要确保在Unity的首选项中启用了相应的选项)。

我总是将默认脚本编辑器(unity首选项->外部工具->外部脚本编辑器)更改为visual studio。这允许您使用断点和预处理器宏,使调试变得更加容易。当你想开始调试时,在visual studio中按f5将其连接到unity,然后像正常情况一样播放,如果遇到断点,visual studio将接管。

你不必改变其他任何事情,也不必像现在这样不断地打开和关闭东西。

另一种调试方法是使用:

Debug.LogErr或("foo");

Debug.LogWarning("foo"); 

Another note is that you can actually bind objects to the Log. This will cause the edit或 to highlight the object is question in the event you are iterating over a list of GameObjects. i.e.:

Debug.LogWarning("this object broke", gameObject);

If you turn on "Err或 Pause" in the console window, the game will automatically pause when the LogErr或 is met. But be warned, it will pause whenever an err或 is thrown.

UnityVS现已正式成为微软的一部分,并可作为2010、12和13版本的附加组件。以下是MSDN博客文章,链接到各种版本:http://blogs.msdn.com/b/visualstudio/archive/2014/07/29/visual-studio-tools-for-unity-1-9.aspx一

你知道Unity的“控制台”窗口吗?您应该能够从菜单/Windows/控制台打开它。它将充当调试器,在预编译和运行时为您提供错误和警告。如果我误解了这个问题,请告诉我。

在MonoDevelop中,窗口顶部附近有一个按钮,上面写着“附着到统一体”。如果在播放场景之前这样做,MonoDevelop中设置的任何断点都会停止那里的主线程。

如果您只是想检查值,Debug.log(消息)会将数据直接打印到unity控制台。

这两者都可以在常规游戏模式下使用。

借助内置的Unity 5.5可视化工作室工具,您只需单击一下即可附加Unity并开始调试

即在编辑之后>;首选项>;外部工具>;外部脚本编辑器>;Visual studio

Easiest way to debug is using Debug.log(""); but this does cost you your performance so how can you debug easier?

答案如下:

To start debugging, press your mouse to the far left edge of the editor (next to the line number) and a red dot will appear, you would have just created a breakpoint! enter image description here

这暂时不会起任何作用,但是,如果你现在转到Unity并在编辑器窗口中按play,就会发生一些很棒的事情…

在窗口的最底部,如果您打开了本地窗口(如果没有,请转到查看>;调试窗口>;本地),您将看到当前存在于本地实例中的所有变量及其在断点被触发时的值。

要继续执行应用程序,只需按MonoDevelop中的“播放”按钮。

您的脚本将继续执行(Unity的编辑器将不再冻结)。当然,在这种情况下,脚本将在下一帧再次命中断点。因此,只需在MonoDevelop中左键单击断点,然后再次单击“播放”按钮,这样它就不会再次执行断点。

你可以用它做更多的事情,例如:

使用断点,您可以使它们在满足某些条件时停止应用程序的运行。例如,假设您想检查fSpeed变量达到10时的值。为此,在MonoDevelop中按Stop按钮,右键单击断点,然后按breakpoint Properties。

将条件设置为“条件为真时中断”,将“条件表达式”设置为“fSpeed>;=10”,然后按“确定”。

将编辑器重新连接到Unity,然后按Unity中的“播放”按钮,当条件满足时,断点将触发并停止应用程序。

关于使用条件断点的注意事项:它们会导致性能问题,因为每次运行时都必须验证表达式

一般来说,这应该比debug.log(“”)更好;至少如果这是你想要的。

使用调试的最佳方式。Log()用于Unity中的调试,如果您的问题适合应用此方法。

I m using the plugins UnityVS, which can debug Unity projects with Visual Studio. Very convinient.

使用UnityVS进行谷歌搜索

您可以使用MS Visual Studio社区进行查看,并获得他们在网站上提供的Unity集成。我最近尝试了它,它很棒,你可以使用最好的IDE之一获得几乎完整的调试功能。与Unity搭配使用,您可以获得一些不错的生产力提升,不仅在调试能力方面,而且在功能集方面。

如果您想查看,这里有一个指向IDE社区版本的链接:https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx一

这也是我提到的Unity集成的链接:https://www.visualstudio.com/features/unitytools-vs一

希望这能有所帮助,一位开发人员将我从Mono转换过来,老实说,我对这种设置非常满意(除非某个IDE一劳永逸地集成了“使其工作”按钮;)。

I think that what the question is after, is a way to launch a "unity built game executable" and attach the debugger to it.
Something like...
creating debugging symbols with gcc, building the application with DEBUG enabled and launching the executable program with gdb to debug it. That way you can launch debugging sessions without using an IDE. But that s in C using gcc... in C# there is no need for debugging symbols for the attached debugger to see the code and it runs over a virtual machine.

There is an open conversation about how this can be done here:
https://github.com/0xd4d/dnSpy/issues/393

给不熟悉虚拟机语言的人的一些快速笔记。C#在编译时生成一种中间语言。例如,与C相反,它产生由CPU直接执行的机器代码。在C#的情况下,这种中间语言是调用公共语言(因为它对所有.NET语言都是通用的,如VB.NET、C#.NET和C++.NET。这种中间语言不是由CPU直接执行的,而是由每个应用程序或进程实例化一次的虚拟机执行的,称为CLR(公共语言运行时)。这意味着,在大多数情况下,如果变量和方法没有被乱码(称为混淆)替换,则程序可以直接由附加到可执行文件的调试器读取

根据对话,unity引擎不使用。NET CLR,但引擎中嵌入了一个单独的(可能经过修改的)CLR。他们确实描述了这样做的方法,但我认为使用Unity编辑器更安全、更容易

无论如何,Unity都是围绕编辑器构建的!例如,在编辑器上下文中,您可以在玩游戏时更改公共变量和引用,这不是一种“经典”的编程方法。但这是一种经典的调试方法

最后,还有一些东西,比如程序的线程,不是开源的,所以我怀疑任何外部工具都无法绕过代码。即使它是纯通用语言,我对此深表怀疑,因为如果它是纯CL,就不需要在引擎中包含单独的(可能是定制的)CLR

在我看来,整个误解是由于Unity使用的语言不是C#,而是一种看起来像C#的Unity变体,它可能与C#兼容,但我不知道兼容程度如何。因此,您在Unity中编程的“CLR”实际上是Unity引擎本身。CLR专注于在许多平台上渲染游戏,而不是经典的C#CLR

About the other answers:
- MonoDevelop lets you use breakpoints and preprocessor macros just as well as any other IDE.
- As for the text debugging using the log. Of course its possible but this is what one does when "real debugging" is not available.


There are two ways of debbuging in unity once is by Log which is console basically within Unity and the other is Debugger which is VS and Mono both supporting . Yes you are right its very awfull process to check by debug point tha what is the value of a and b etc so here is my opinion that use only what is best suiteable for you i mean you do not need of debugging point for just know the value of a and b just log it. and when there is need for debugging point you already know the method.

您可以使用运行按钮(看起来像左上角的播放按钮)连接到Unity编辑器进行调试,但如果您没有通过这种方式成功连接到Unity,您可能需要检查是否在插件管理器首选项中启用了相应的插件。

Windows: Tools > Add-in Manager > Unity > Mono Soft Debugger Support for Unity

OSX: Unity > Add-in Manager > Unity > Mono Soft Debugger Support for Unity

(选择并单击启用。)

使用debug.log(“消息”);用于调试

我也喜欢在Unity编辑器中创建记录有用数据的快捷方式。例如,记录我所有积极成就的当前状态。

[MenuItem("My Game/Runtime debug/Achievement states")]
public static void LogAchievementStates ()
{
    foreach (AchievementState achievementState in Data.achievementStates)
    {
        Debug.Log ("Achievement " + achievementState.name + " is at " + achievementState.completion + "%");
    }
}

在编辑器脚本中执行此操作将显示一个菜单按钮来运行某些操作。

尝试过视觉工作室吗?在那里,您可以将脚本附加到unity并对其进行调试。

首先,您必须将monodevelop或visual studio中的C#代码附加到Unity调试器上,然后按下IDE monodevelops中的播放按钮,最后在Unity上播放。

只需尝试使用要调试的Visual Studio打开C#脚本即可。为此,请使用Visual Studio 2017,然后使用调试器启动项目,在所需位置应用断点并运行项目。我认为这将解决您的问题并调试所需的代码

Unity文档--在Unity中调试C#代码提供了在编辑器和播放器中调试C#码的完整方法。





相关问题
Eclipse: Hover broken in debug perspective

Since upgrading Eclipse (Galileo build 20090920-1017), hover in debug no longer displays a variable s value. Instead, hover behaves as if I were in normal Java perspective: alt text http://...

IIS 6.0 hangs when serving a web-service

I am having issues with one of our web-services. It works fine on my development machine (win XP) whether I host it as a separate application or using cassini from Visual studio. Once I deploy on the ...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Asp.Net MVC - Problem returning a model to the view

I ve recently started using the Areas functionality of the Preview2 and it was working ok until I needed to return a Model to the view. Controller: public ActionResult ForgotPassword() { return ...

Unable to generate PDB files in Visual Studio 2005

For most assemblies, I m able to generate their respective .pdb files. However, I ve got one project that isn t generating their .pdb files. I ve made sure that it on debug mode and that the project ...