Nano Hash - криптовалюты, майнинг, программирование

Отладка PHP в коде Visual Studio работает только иногда

Моя php-отладка с помощью xdebug в Visual Studio работает только иногда. Иногда я просто получаю обычную загрузку страницы браузера (журнал ошибок ниже).

Редактировать: Сначала я подумал, что это связано с расположением файла, но я заметил, что это может произойти в любом месте; либо xdebug находит ошибку в коде, не останавливаясь на моих собственных контрольных точках; или он может найти все типы точек останова ИЛИ вообще ничего не найти ... Теперь я думаю, что это связано с обновлением, изменением и повторным сохранением файла, а также с тем, какие типы ошибок есть в файле. Я вернусь к этому, если смогу выяснить, что вызывает это.

В моей текущей настройке у меня есть мой локальный веб-сайт /home/user/Git/www/projects, на который указывает 127.0.0.1. Однако я также настроил несколько виртуальных хостов, которые находятся в соответствующих подпапках: /home/user/Git/www/projects/project_name.


Кое-что я уже рассмотрел

В этой теме: Visual Studio Code — Xdebug не будет работать — они предлагают установка xdebug.remote_connect_back = 1, которая не решает проблему. Они также предлагают установить localSourceRoot в файле launch.json, чтобы он указывал на корень сервера. Однако простое добавление "localSourceRoot": "http://127.0.0.1" или что-то вроде "localSourceRoot": "http://127.0.0.1/project_name" не сработало.


Журналы

/etc/hosts

127.0.0.1   project_names
127.0.0.1   php
127.0.0.1   localhost 
::1         localhost

php.ini:

[Xdebug] 
zend_extension = xdebug.so
xdebug.remote_enable = on
xdebug.remote_autostart = on
xdebug.remote_handler = dbgp
xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000
xdebug.remote_mode = req
xdebug.idekey=php-vs
;xdebug.remote_connect_back = 1

launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "log": true,
            "request": "launch",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

Консоль отладки VS:

<- launchResponse
Response {
  seq: 0,
  type: 'response',
  request_seq: 2,
  command: 'launch',
  success: true }

new connection 1
<- threadEvent
ThreadEvent {
  seq: 0,
  type: 'event',
  event: 'thread',
  body: { reason: 'started', threadId: 1 } }

<- initializedEvent
InitializedEvent { seq: 0, type: 'event', event: 'initialized' }

-> threadsRequest
{ command: 'threads', type: 'request', seq: 3 }

<- threadsResponse
Response {
  seq: 0,
  type: 'response',
  request_seq: 3,
  command: 'threads',
  success: true,
  body: { threads: [ Thread { id: 1, name: 'Request 1 (9:06:23 PM)' } ] } }

-> setBreakpointsRequest
{ command: 'setBreakpoints',
  arguments: 
   { source: 
      { path: '/home/micke/Git/www/projects/php/trial.php',
        name: 'trial.php' },
     lines: [ 14 ],
     breakpoints: [ { line: 14 } ],
     sourceModified: false },
  type: 'request',
  seq: 4 }

<- setBreakpointsResponse
Response {
  seq: 0,
  type: 'response',
  request_seq: 4,
  command: 'setBreakpoints',
  success: true,
  body: { breakpoints: [ { verified: true, line: 14 } ] } }

-> setFunctionBreakpointsRequest
{ command: 'setFunctionBreakpoints',
  arguments: { breakpoints: [] },
  type: 'request',
  seq: 5 }

<- setFunctionBreakpointsResponse
Response {
  seq: 0,
  type: 'response',
  request_seq: 5,
  command: 'setFunctionBreakpoints',
  success: true,
  body: { breakpoints: [] } }

-> setExceptionBreakpointsRequest
{ command: 'setExceptionBreakpoints',
  arguments: { filters: [ '*' ] },
  type: 'request',
  seq: 6 }

<- setExceptionBreakpointsResponse
Response {
  seq: 0,
  type: 'response',
  request_seq: 6,
  command: 'setExceptionBreakpoints',
  success: true }

-> configurationDoneRequest
{ command: 'configurationDone', type: 'request', seq: 7 }

-> threadsRequest
{ command: 'threads', type: 'request', seq: 8 }

<- threadsResponse
Response {
  seq: 0,
  type: 'response',
  request_seq: 8,
  command: 'threads',
  success: true,
  body: { threads: [ Thread { id: 1, name: 'Request 1 (9:06:23 PM)' } ] } }

<- configurationDoneResponse
Response {
  seq: 0,
  type: 'response',
  request_seq: 7,
  command: 'configurationDone',
  success: true }

<- threadEvent
ThreadEvent {
  seq: 0,
  type: 'event',
  event: 'thread',
  body: { reason: 'exited', threadId: 1 } }

  • Вы можете найти ответ, который я дал для PHPStorm, полезным, поскольку я тоже боролся с тем, чтобы заставить XDebug работать stackoverflow.com/questions/45019201/ 01.09.2017

Ответы:


1

Наконец-то я понял, что проблема связана с точками монтирования. Проект в VScode был открыт по пути, где был смонтирован веб-сервер; не там, где он изначально указывал в apache. Таким образом, точки останова считались добавленными в другой файл, поскольку путь был другим.

03.09.2017
  • Поделитесь, как вам удалось это исправить? У меня тут 2 локальных проекта, один из них xdebug работает отлично, другой нет 09.05.2018
  • Это было некоторое время назад, но я думаю, что я только что открыл VScode по исходному веб-пути, указанному в apache, вместо того, чтобы открывать его косвенно по какому-то смонтированному или связанному с mb пути. 10.05.2018

  • 2

    ваша отладка иногда работает, кажется, ваша конфигурация правильная, поэтому причина может быть вызвана портом php xdebug. У меня это работает нормально, когда я сделал это:

    1. Используйте php --ini, чтобы показать файл конфигурации php и измените порт xdebug на 9900 (или другой номер): xdebug.remote_port=9900 затем перезапустите php

    2. измените порт vscode xdebug на тот же номер в launch.json: "port": 9900

    3. наслаждайтесь отладкой

    03.12.2018

    3

    обновите до последней версии xdebug и установите для xdebug.remote_timeout более высокое значение, например 3000

    24.03.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..