Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Code run with -c or a "code" launch gets __name__ == "builtins" instead of "__main__"

Đang mở
#2,079 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

@Om-singhaI đang làm issue này rồi.

Từ ngày 6/10/2026.

  • #2080 của @Om-singhaI — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
python
Lĩnh vực
backend

Hướng nghiên cứu

Start with run_code() in src/debugpy/server/cli.py and the CLI tests in tests/debugpy/server/test_cli.py; compare its execution setup with run_file() using runpy.run_path(). Run the focused CLI tests and reproduce with python3 -m debugpy --listen 127.0.0.1:0 -c "$CODE". Done when code runs with __name__ == "__main__", its main block runs, and the reported pickling failure is covered by a test.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Before creating a new issue, please check the FAQ to see if your question is answered there.

Environment data

  • debugpy version: 1.8.22+3.g751502d (running from source at 751502d, current main)
  • OS and version: macOS 26.6.2 (25G83)
  • Python version (& distribution if applicable, e.g. Anaconda): CPython 3.10.6 from python.org, and 3.14.3 from Homebrew
  • Using VS Code or Visual Studio: neither. I used the CLI, and also a "code" launch sent straight to the adapter.

Actual behavior

Code passed with -c, or with "code" in a launch configuration, doesn't run as __main__. __name__ is "builtins", so an if __name__ == "__main__": block is skipped, and a class the code defines can't be pickled:

__name__ = builtins
pickle failed: Can't pickle <class 'Point'>: attribute lookup Point on builtins failed

That is from 3.10.6. 3.14.3 gives the same result, with the pickle error worded as it's not found as builtins.Point.

run_code() in src/debugpy/server/cli.py ends with eval(code, {}). That globals dict has no __name__, so the name is looked up in builtins and comes back as "builtins". A class the code defines gets that as its __module__, which is where pickle then looks for it. A file target doesn't have this problem, because run_file() uses runpy.run_path(target, run_name="__main__"), which puts a temporary __main__ module in place.

A "code" launch goes through the same function, since the adapter turns it into a -c argument for the debugpy CLI in the debuggee. With "code": ["print('__name__ is', __name__)", "if __name__ == '__main__':", " print('main block ran')"] and "console": "internalConsole", the debuggee prints __name__ is builtins and nothing else.

Expected behavior

The same as python -c:

__name__ = __main__
main block ran
pickle ok

Steps to reproduce:

CODE='import pickle
class Point: pass
print("__name__ =", __name__)
if __name__ == "__main__":
    print("main block ran")
try:
    pickle.dumps(Point()); print("pickle ok")
except Exception as e:
    print("pickle failed:", e)'

python3 -c "$CODE"
python3 -m debugpy --listen 127.0.0.1:0 -c "$CODE"

The first command prints the expected output above and the second prints the actual output. Nothing needs to attach; the code runs right away because --wait-for-client isn't given.

I have a fix and can open a PR. It runs the code in a temporary __main__ module, the same way run_path() does for a file, and adds a test to tests/debugpy/server/test_cli.py.

Ngôn ngữ chính
Python
Star
2.5k
Fork
205
Merge trung bình
1 ngày 9 giờ
Pull request đã merge (30 ngày)
3

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của microsoft/debugpy

Tất cả issue của microsoft/debugpy

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.