Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавляет статью "Как дебажить?" #2002

Closed
wants to merge 17 commits into from

Conversation

alexbaumgertner
Copy link
Contributor

@alexbaumgertner alexbaumgertner commented Oct 17, 2021

fixes #375

  • Отладка с помощью консоли
  • Инструменты chrome devtools
  • Практика: вывод в консоль
  • точки останова выполнения функции


В этой вкладке отображается весь загруженный JS код для страницы. Если у сайта включены source maps, то будут доступны исходники сайта для просмотра и выставления точек отстановки кода.

### Оставнока и продолжение выполнения кода
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Просто остановка
Остановка по условию

Step over line of code
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alexbaumgertner alexbaumgertner changed the title Добавляет заготовку статьи "Как дебажить?" Добавляет статью "Как дебажить?" Oct 27, 2021
@nlopin
Copy link
Contributor

nlopin commented Nov 17, 2021

@alexbaumgertner прйти на помощь?

@alexbaumgertner
Copy link
Contributor Author

@nlopin да, спасибо!

@alexbaumgertner
Copy link
Contributor Author

@nlopin статья еще актуальна? Хочу вернуться к ней и закончить.

@nlopin
Copy link
Contributor

nlopin commented Oct 16, 2022

Привет! Конечно актуальна 👍

@solarrust solarrust added js Контент по JavaScript статья Расширенный материал labels Oct 19, 2022
@HellSquirrel
Copy link
Member

@alexbaumgertner будем тут допиливать?) Я могу как-то помочь?

@alexbaumgertner
Copy link
Contributor Author

@alexbaumgertner будем тут допиливать?) Я могу как-то помочь?

Да, мне нужна помощь с примерами отладки в браузере

@HellSquirrel
Copy link
Member

🔥 Замечательно
Уточни в каком формате тебе помогать :)

@alexbaumgertner
Copy link
Contributor Author

🔥 Замечательно
Уточни в каком формате тебе помогать :)

Можно созвониться на выходных и парно попрограммировать

@alexbaumgertner
Copy link
Contributor Author

🔥 Замечательно
Уточни в каком формате тебе помогать :)

Можно созвониться на выходных и парно попрограммировать

@HellSquirrel Завтра, 10 декабря вечером тебе удобно?

@HellSquirrel
Copy link
Member

@alexbaumgertner сори что поздно сюда зашла. Давай попробуем след. выходные или любое удобное тебе время, начиная с четверга :)

@alexbaumgertner
Copy link
Contributor Author

@alexbaumgertner сори что поздно сюда зашла. Давай попробуем след. выходные или любое удобное тебе время, начиная с четверга :)

В выходные будет ок!

Я начал добавлять примеры и скриншоты.
Нужна хорошая идея примера, который можно поотлаживать, я пока остановился на калькуляторе дней.

Copy link
Member

@HellSquirrel HellSquirrel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Крутое начало ❤️
Если парно попраграммировать все еще актуально, выбирай слотик на выхах и поехали
https://calendly.com/polina_gurtovaya/pair-programming-on-weekends?month=2022-12

Сначала определимся с тем, что мы ищем в коде.
Баги в программе могут быть двух видов – запуск программы аварийно завершается ошибкой или программа выдает неверные результаты.

- В первом случае достаточно открыть консоль браузера и вы увидите название ошибки и строку кода, где произошло исключение (exception), вызвавшее остановку выполнения кода. Подробнее такие ошибки описаны в [Error и стандартные ошибки](/js/errors/)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

При наличии современных сборщиков, мы увидим все что угодно кроме строчки кода :(
Тут, кажется, надо рассказывать про сорс-мапы и всякие Sentry которые переписывают функции логирования. Или переформулировать предложение

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

js/debugging/index.md Show resolved Hide resolved
js/debugging/index.md Show resolved Hide resolved
js/debugging/index.md Show resolved Hide resolved

### Примеры

#### Chrome
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Было бы хорошо упомянуть VSCode debugger

![Инструменты разработчика Firefox, только консоль](images/dev-tools-console-john_firefox.png)

### Оставнока и продолжение выполнения кода
В devtools можно проставить точки остановки выполнения программы. Движок браузера встретив такую точку поставит выполнение кода на паузу и даст доступ к просмотру текущих значений переменных.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это почти так, но если более точно, мы можем смотреть stack-frames в которых лежат переменные



#### Остановка по условию
Добавленную в devtools точку остановки можно редактировать — задать остановку по условию: в поле ввода ввести выражение, возвращаемое значение true или false будет определять, останавливать или нет выполнение программы в этом месте.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Было бы здорово добавить и другие условия, например те что задаются из панели elements (правая кнопка + break on)

@StarHamster
Copy link
Contributor

@alexbaumgertner, привет, кажется, намечается крутая статья 👀

Хочу обратить твоё внимание, что в Доке принято писать один абзац в одной строке, потому что парсер, когда видит перенос строки, вставляет <br> (см. скрин, переносы там, где их не должно быть). Ну и между абзацами и заголовками обычно ставят пустую строку, но это уже чисто для красоты 🤩

image


#### Стек вызовов
TODO: добавить пояснение
js/async-in-js/index.md
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HellSquirrel
Copy link
Member

@alexbaumgertner приветик. Надо помогать?)

@alexbaumgertner
Copy link
Contributor Author

@alexbaumgertner приветик. Надо помогать?)

Да, я застрял на примере.

@@ -0,0 +1,62 @@
/**
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HellSquirrel посмотри пожалуйста пример

Copy link
Contributor

@mbelsky mbelsky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Привет, полезная должна получиться статья! Есть пара предложений

* Пример отладки асинхронного кода
* */

(async function () {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Что думаешь про использование top level await? Должно работать во всех браузерах https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#browser_compatibility

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я бы оставила как есть. Top level await не очень хорошо пока в нодике работает. На случай если будут переносить

async function getNetSalary (salaryGross) {
const taxValueRealResult = await getTaxValueReal('AB')

if (!taxValueRealResult.error) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ДУмаю что лаконичнее будет обойтись без отрицания, как считаешь?

Suggested change
if (!taxValueRealResult.error) {
if (taxValueRealResult.data) {

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут надо аккуратно, если taxValueRealResult.data = 0, то код сломается.


return netSalary
} else {
return Promise.reject(taxValueRealResult.error)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Альтернативный синтаксис:

Suggested change
return Promise.reject(taxValueRealResult.error)
throw taxValueRealResult.error


console.log("Зарплата после налогов: ", netSalary);
} catch (error) {
console.warn("Ошибка при вычислении зарплаты после налогов: ", error);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вижу что где-то есть ;, а где-то нет. У редакции есть правила на форматирование кода?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я форматирую своим prettier. Специальных требований нет


#### Пример подключения к NodeJS отладчику

Chrome позволяет подключаться к [NodeJS рантайму](https://nodejs.org/en/docs/guides/debugging-getting-started/#command-line-options) и выполнять отладку в средствах разработчика.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Думаю что кроме command-line-options есть еще смысл оставить ссылку на #inspector-clients чтобы у читателя была информация как подключиться дебаггером к процессу.

@github-actions
Copy link

Превью контента из b802587 опубликовано.

@HellSquirrel
Copy link
Member

Пока закрываю этот PR, @alexbaumgertner приходи переоткрывать, если найдутся силы :) Я с удовольствием помогу тебе закончить статью :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js Контент по JavaScript статья Расширенный материал
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Как дебажить?
6 participants