# 調試
由于xlwings在每個Python環境中運行,因此您可以使用首選的調試方式。
* **RunPython**: 通過`RunPython`調用Python時,可以設置`mock_caller`,以便在從Excel和Python調用函數之間來回切換。
* **UDFs**: 對于調試用戶自定義函數,xlwings提供了方便的調試服務器
首先,Excel將在消息框中顯示Python錯誤:

>[info]注意
在Mac上,如果在導入xlwings之前模塊/包的`import`失敗,則不會顯示彈出窗口,也不會重置狀態欄。 但是,錯誤仍將記錄在日志文件中。 有關日志文件的位置,請參閱[加載項](addin.md)。
## RunPython
請參考以下Python源代碼`my_module.py`的示例代碼:
~~~
# my_module.py
import os
import xlwings as xw
def my_macro():
wb = xw.Book.caller()
wb.sheets[0].range('A1').value = 1
if __name__ == '__main__':
# Expects the Excel file next to this source file, adjust accordingly.
xw.Book('myfile.xlsm').set_mock_caller()
my_macro()
~~~
`my_macro()`現在可以很容易地從Python運行以進行調試,并且可以通過`RunPython`從Excel運行而無需更改源代碼:
~~~
Sub my_macro()
RunPython ("import my_module; my_module.my_macro()")
End Sub
~~~
## UDF debug server
僅限Windows:要調試UDF,只需檢查[加載項](addin.md)中的`Debug UDFs`, xlwings VBA模塊。 然后在Python源文件的末尾添加以下行并運行它。 根據您使用的IDE,您可能需要以“調試”模式運行代碼(例如,如果您使用的是PyCharm或PyDev):
~~~
if __name__ == '__main__':
xw.serve()
~~~
重新計算工作表(`Ctrl-Alt-F9`)時,代碼將在斷點處停止或輸出您可能具有的任何打印調用。
以下屏幕截圖顯示了在PyCharm社區版本的斷點處停止的代碼:

>[info]注意
從命令提示符運行調試服務器時,目前沒有優雅的方法來終止它,但關閉命令提示符將終止它。