簡體   English   中英

無法使用 pydevd-pycharm 連接到遠程調試服務器

[英]Can't connect to remote debug server with pydevd-pycharm

我有一個使用 docker 部署的 Django 項目。我想使用Python Remote Debug調試該項目。 這是我如何根據https://www.jetbrains.com/help/pycharm/remote-debugging-with-product.html配置它

在此處輸入圖像描述

之后我啟動了調試器,它說:

Use the following code to connect to the debugger:
import pydevd_pycharm
pydevd_pycharm.settrace('0.0.0.0', port=3000, stdoutToServer=True, stderrToServer=True)
Waiting for process connection...

在此處輸入圖像描述

之后我將代碼復制到manage.py中的__main__

在此處輸入圖像描述

順便提一句。 將上面的代碼放在某些views中而不是 manage.py dint 幫助

接下來我用 docker 啟動了docker-compose up -d proj命令

過了一會兒,我從我的容器中看到日志說:

Could not connect to localhost: 3000
NoneType: None
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/wsgiref/handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
  File "/usr/local/lib/python3.6/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python3.6/site-packages/sentry_sdk/integrations/django/__init__.py", line 93, in sentry_patched_wsgi_handler
    environ, start_response
  File "/usr/local/lib/python3.6/site-packages/sentry_sdk/integrations/wsgi.py", line 69, in __call__
    rv = self.app(environ, start_response)
  File "/usr/local/lib/python3.6/site-packages/sentry_sdk/integrations/django/__init__.py", line 92, in <lambda>
    return SentryWsgiMiddleware(lambda *a, **kw: old_app(self, *a, **kw))(
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/wsgi.py", line 157, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/sentry_sdk/integrations/django/__init__.py", line 112, in sentry_patched_get_response
    return old_get_response(self, request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in get_response
    response = self._middleware_chain(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/utils/deprecation.py", line 140, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/app/xwing/middleware.py", line 21, in middleware
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/viewsets.py", line 116, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 492, in dispatch
    response = handler(request, *args, **kwargs)
  File "/app/cards/views.py", line 52, in version
    return Response({'version': get_newest_version()})
  File "/app/cards/queries.py", line 76, in get_newest_version
    pydevd_pycharm.settrace('localhost', port=8080, stdoutToServer=True, stderrToServer=True)
  File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 1282, in settrace
    stop_at_frame,
  File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 1327, in _locked_settrace
    debugger.connect(host, port)  # Note: connect can raise error.
  File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 364, in connect
    s = start_client(host, port)
  File "/usr/local/lib/python3.6/site-packages/_pydevd_bundle/pydevd_comm.py", line 568, in start_client
    sys.exit(1) #TODO: is it safe?
SystemExit: 1

到目前為止,我嘗試在 0.0.0.0:8000、localhost:8000 等不同端口上運行調試服務器。 但它沒有幫助。 我拿了另一個項目確實需要 docker 才能工作,並且一切正常。 docker 似乎有問題。有什么想法嗎? 我不知道為什么我不工作。

我從未做過,但是看起來'0.0.0.0'部分是運行Pycharm的計算機的地址。

您必須設置機器的IP。 可能也會成功以網絡模式“主機”運行容器(因為0.0.0.0是指容器內部)

也許您發現也有用:

不確定它是否會對任何人有所幫助,但就我而言,事實證明我忘記了 mac OS 上的 docker 使用 host.docker.internal。

所以我設置:

pydevd_pycharm.settrace('host.docker.internal', port=YOUR_PORT, stdoutToServer=True, stderrToServer=True)

然后單擊編輯配置 => python 調試服務器:

host : host.docker.internal
port YOUR_PORT

不要忘記路徑映射,(訪問您的 docker 並查看在哪里可以找到與根目錄完全相同的文件夾,並且不要忘記放置根目錄的絕對路徑,在我的例子中是這樣的 /Users/UserName /Repo/Your_root= /app/src)

它奏效了!

事實證明,端口可以是任何東西,只要它不與現有端口沖突(注意,編輯配置和 settrace 中的端口必須匹配)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM