Muitas vezes é necessário depurar o código lua no trabalho. Antes, eu usava o VS para depurar o código C# e o Intellij Idea para depurar o código lua. Isso é bastante problemático, então verifiquei e posso usar o Rider diretamente para depurar C# e código lua uniformemente.
Instalação do piloto:
Download do Rider: Faça o download no site oficial do Rider , selecione a versão correspondente de acordo com suas necessidades, é recomendável usar o Rider2020.1.0, consulte o link
Use o Rider para depurar o código C#:
Abra o Unity e defina-o como Rider de preferência. Ao clicar duas vezes em um arquivo C#, ele será aberto automaticamente com o Rider:
Selecione "Anexar ao Unity Editor" na barra de menus do Rider
:
Perceber:
1. Geralmente, selecione "Anexar ao Unity Editor", não selecione "Anexar ao Unity Editor & Play". O último iniciará automaticamente o Unity após clicar no ícone de depuração - em alguns casos, não é necessário iniciar automaticamente o Unity para conveniência de depuração. A diferença entre os dois é apenas iniciar automaticamente o Unity durante a depuração, o que pode ser determinado de acordo com a situação específica
2. Ao quebrar o código C#, você precisa iniciar a depuração no Rider primeiro e, em seguida, executar o Unity.
Usar o código C# do ponto de interrupção do Rider é muito simples, porque você pode associar o Unity ao Rider após a instalação do Rider, e a depuração do código é muito simples
Use o Rider para depurar o código Lua:
1. Instale o plug-in EmmyLua para depuração lua:
Na barra de menus do Rider "Arquivo -> Configurações":
2. Configure o LuaDebugger:
Clique em "Editar configuração":
Clique no "+" no canto superior esquerdo para adicionar o LuaDebugger
:
Defina o método Name e Connection do LuaDebugger:
3.LuaDebugger tem dois métodos de conexão
Método 1: Rider atua como um servidor - Tcp (Debugger connect IDE)
Rider primeiro inicia o modo de depuração, espera o Unity iniciar e então se conecta
1. De acordo com as configurações no LuaDebugger, você precisa colar "dbg.tcpConnect" no código lua:
2. Encontre o arquivo inicial onde o C# chama o código Lua, como "GameMain.lua", etc., e adicione na parte superior do código:
Ou você também pode colocar o "dbg.tcpConnect" copiado e outros códigos no script de lua independente "EmmyLuaDebgger.lua" e, em seguida, "Require EmmyLuaDebugger" em "GameMain.lua" também pode:
Por exemplo, crie um novo script "EmmyLuaDebugger.lua":
-- TCP (Debugger connect IDE)
package.cpath = package.cpath .. ';C:/Users/Frank/AppData/Roaming/JetBrains/Rider2021.3/plugins/EmmyLua/debugger/emmy/windows/x64/?.dll'
local dbg = require('emmy_core')
dbg.tcpConnect('localhost', 9966)
Em GameMain.lua:
3. Inicie o modo de depuração do Rider:
Após selecionar "LuaDebugger", clique no botão "Debug" para iniciar a depuração:
Em seguida, execute o Unity, após a conexão automática ser bem-sucedida, o código lua do ponto de interrupção pode ser executado normalmente
Método 2: o Unity atua como um servidor - TCP (depurador de conexão IDE)
Inicie o Unity primeiro, espere o Rider se conectar e depois depure
1. Copie o código de conexão "dbg":
2. Crie um novo arquivo EmmyLuaDebugger.lua:
--[[-- TCP (Debugger connect IDE)
package.cpath = package.cpath .. ';C:/Users/Frank/AppData/Roaming/JetBrains/Rider2021.3/plugins/EmmyLua/debugger/emmy/windows/x64/?.dll'
local dbg = require('emmy_core')
dbg.tcpConnect('localhost', 9966)]]
-- TCP (IDE connect debugger)
package.cpath = package.cpath .. ';C:/Users/Frank/AppData/Roaming/JetBrains/Rider2021.3/plugins/EmmyLua/debugger/emmy/windows/x64/?.dll'
local dbg = require('emmy_core')
dbg.tcpListen('localhost', 9966)
dbg.waitIDE() -- 这句话非常重要,否则无法确定Rider连接状态
3. Execute o script onde C# originalmente chama o código Lua:
Adicione a seguinte instrução em "GameManager.cs"
:
PS:
1. Neste modo, você precisa adicionar uma instrução "dbg.waitIDE()" no final de "dbg.tcpListen", caso contrário, ele será executado diretamente após iniciar o Unity e não haverá "aguardando o estágio de conexão do Rider ", por isso é impossível depurar o ponto de interrupção normalmente.
Depois que "dbg.waitIDE()" for executado, o Unity será travado diretamente. Neste momento, o Unity continuará a executar somente após a conexão do Rider ser bem-sucedida.
2. Depois de executar "dbg.waitIDE", o Unity ficará preso diretamente, aguardando a conexão do Rider. Neste ponto, você pode adicionar algumas explicações para lembrá-lo de iniciar a depuração do Rider, por exemplo, adicionar exibição "OnGUI" em "GameManager.cs" e adicionar métodos de implementação específicos posteriormente
3. Inicie o Unity e, em seguida, comece a depurar no lado do Rider para quebrar o código lua normalmente