·
编程学习 ·
51288
附加到进程,可以调试已经发布到服务器的项目。vs选择调试->附加到进程
默认显示的本地计算机的进程。
如果要调试远程服务器的程序,服务器运行调试器即可。调试器可以在vs的安装目录下找到,Remote Debugger文件整个复制到服务器。也可以到官方下载
服务器在进入文件路径Remote Debugger\x64\msvsmon.exe运行msvsmon.exe程序,调试程序运行默认的端口号为4024
记得开放端口号,否则连接不上。复制红色下划线的名称,如果你的机器与服务器在同一个局域网内,可以直接使用这个名称连接调试。
建议***在服务器上再新建一个计算机账号,然后在调试器上工具->权限设置账号。
回到vs2019 附加到进程
连接目标上粘贴刚刚复制的计算机名和端口号(局域网才这样做,非局域网,服务器ip:端口号),回车。
如果下面显示进程表示连接成功了。
那.NET Core进程为例,在筛选进程的搜索框输入dotnet,将会显示发布的.NET Core项目,选中然后附加vs就进入了调试模式了。
如果发现项目引用的dll类库那里不能断点,则可以在vs工具->设置->调试->常规:去掉勾中的 启用“仅我的代码”,
还有如果附加的进程版本和现在vs项目调试的代码版本有出入的话也会断点失败,这时也可以去掉勾选 要求源文件与原始版本完全匹配。
np.set_printoptions()可直接控制NumPy数组显示格式;默认格式因小数位不一致、科学计数法混用及自动截断而影响调试效率;关键参数需协同设置,如precision控制有效位数、suppress禁用科学计数法、threshold避免省略、linewidth防换行混乱、floatmod...
生产环境禁用asyncio.run(),须手动管理事件循环并捕获未完成任务;asyncio.Lock必须加超时;create_task()后需显式跟踪等待;连接池耗尽等资源问题亦会导致无日志卡死。 asyncio.run()在生产环境直接调用会掩盖死锁信号 生产环境不能用asyncio.run()启...
pytest-forked不支持单个用例独立进程,因其fork发生在模块级而非用例级,仅对整个测试文件生效;真正实现per-test-case进程隔离需使用pytest-xdist的--boxed模式。 直接用pytest-forked无法让「每个测试用例」都在独立进程中运行——它只支持「每个测试文...
VSCode默认不调试子线程,需在launch.json中设置"subProcess":true和"justMyCode":false才能使threading.Thread中的断点生效。 VSCode默认无法在子线程中命中断点,必须显式启用多线程调试支持,否则threading.Thread启动的代...
直接用dict传给子进程会导致内存翻倍,因fork后的写时复制被Python内部操作(如引用计数、哈希查找)意外触发;共享只读字典应使用shared_memory+序列化,配合显式清理。 直接用dict传给子进程,内存几乎必然翻倍——不是因为你要改它,而是Python解释器自己就在偷偷写它。 为什么...
ThreadPoolExecutor适合I/O密集型任务,如网络请求、文件读写、数据库查询,因线程等待时会释放GIL;ProcessPoolExecutor才适用于CPU密集型任务,因其绕过GIL实现真正并行。 选对执行器比调参重要得多——ThreadPoolExecutor和ProcessPool...
RabbitMQ本身保证单条消息只投递一次给一个消费者,数据一致性问题源于业务逻辑并发执行导致的竞态,而非消息重复投递;basic_ack仅确认消息接收,不保障业务执行唯一性,故无法解决数据一致性问题。 多进程消费同一个RabbitMQ队列时,数据一致性问题不来自RabbitMQ本身(它天然保证单条...
ProcessPoolExecutor比手写Process更稳,因其内置进程复用、超时控制、异常透传;避免AttributeError需将函数置于模块顶层且非lambda/嵌套;max_workers应据内存与任务粒度调优,而非盲目设为cpu_count()。 训练模型时CPU占用率“过高”不是bu...