Отладка плагинов в MS Visual Studio Code
========================================

В среде разработки **MS Visual Studio Code** есть возможность отладки плагинов и приложений для **Аксиомы.ГИС**.
Перед началом выполнения данной инструкции необходимо настроить окружение разработчика в папке с плагином так, как это описано здесь: :doc:`visual_studio_code`.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#.	Для начала надо установить модуль **ptvsd**. Для этого, если у вас уже создано виртуальное окружение, выполните в терминале команду:

	.. code-block:: bash
	
		".venv\\Scripts\\python.exe" -m pip install ptvsd
		
	**Установка модуля ptvsd:**
	
	.. image:: images/vs_code_attach/VSC_Attach_Screen_1.png
		:alt: Установка модуля ptvsd
		
#.	В папках, куда установлена **Аксиома.ГИС**, надо найти скрипт *startaxioma.py*, поднимающий **Аксиому.ГИС** из *python*, и скопировать его в папку с плагином. 
	Обычно он находится в директории *./Axioma.GIS/share/axioma/python_samples*. В последней версии он выглядит так:
	
	.. code-block:: python
	
		import axioma.app
		import axioma.gui
		import sys

		'''
		Запуск аксиомы как приложения из среды питон. Например, PyCharm
		'''

		if __name__ == '__main__':
			a = axioma.app.AxiomaApplication(sys.argv)
			gui = axioma.gui.Gui(a)
			gui.initialize()
	
			mainWindow = axioma.app.MainWindow.create(gui)
	
			mainWindow.show()
			sys.exit(a.exec())
			
	**Файл startaxioma.py:**
	
	.. image:: images/vs_code_attach/VSC_Attach_Screen_2.png
		:alt: Файл startaxioma.py
		
#.	В скопированном файле *startaxioma.py* нужно добавить 4 строчки  после условия "if" (строка с функцией "print" необязательна):
	
	.. code-block:: python
	
		import axioma.app
		import axioma.gui
		import sys

		'''
		Запуск аксиомы как приложения из среды питон. Например, PyCharm
		'''

		if __name__ == '__main__':
		
			import ptvsd
			print("Waiting for debugger attach")
			ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True)
			ptvsd.wait_for_attach()
			
			a = axioma.app.AxiomaApplication(sys.argv)
			gui = axioma.gui.Gui(a)
			gui.initialize()
	
			mainWindow = axioma.app.MainWindow.create(gui)
	
			mainWindow.show()
			sys.exit(a.exec())
			
	**Дополненный файл startaxioma.py:**
	
	.. image:: images/vs_code_attach/VSC_Attach_Screen_3.png
		:alt: Дополненный файл startaxioma.py

#.	В папке *.vscode* в файле *launch.json* необходимо создать новую конфигурацию:

	.. code-block:: json

		{
			"name": "Python: Attach",
			"type": "python",
			"request": "attach",
			"port": 5678,
			"host": "localhost",
			"pathMappings": [
				{
					"localRoot": "${workspaceFolder}",
					"remoteRoot": "."
				}
			]
		}
		
	**Новая конфигурация для отладки:**
	
	.. image:: images/vs_code_attach/VSC_Attach_Screen_4.png
		:alt: Новая конфигурация для отладки
		
#.	Теперь при запуске скрипта **startaxioma.py** перед открытием главного окна **Аксиомы.ГИС** будет происходить остановка до того момента, пока не будет запущена конфигурация отладки **"Python: Attach"** во вкладке **Debug**.
	После запуска этой конфигурации при старте плагина из интерфейса запущенной скриптом **Аксиомы.ГИС** все функции отладки, такие как точки останова, в коде этого плагина будут работать.
	
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Теперь вы можете использовать **MS Visual Studio Code** для отладки плагинов в среде **Аксиомы.ГИС**.

|
