LINUX.ORG.RU

Дебагирование

 


0

5

Уважаемые растоводы, как вы дебагируете свой код? Я установил Rust 1.22.1 и плагин под IntelliJ для Rust. Всё бы хорошо, но дебагирование там не поддерживается, от слова совсем. Есть какой-то покрытый мхом подпроект по добавлению этой функциональности в IntelliJ https://github.com/intellij-rust/intellij-rust/issues/535 но посследний коммит там пробегал 11 месяцев назад.

★★★★★
Ответ на: комментарий от Virtuos86

Объяснять это бесполезно. Только спровоцируешь новую волну филологического срача.

bbk123 ★★★★★
() автор топика
Ответ на: комментарий от Virtuos86

Какое к чёрту хакерство? Решил изучить Rust, в частности работу стандартных библиотек. В Java это делается без проблем, а тут опять какое-то шаманство и куча недобитых филологов с новогоднего бодуна.

bbk123 ★★★★★
() автор топика
Ответ на: комментарий от bbk123

Решил изучить Rust, в частности работу стандартных библиотек.

И тебе для этого нужен отладчик, а не браузер кода? O_o

tailgunner ★★★★★
()
Ответ на: комментарий от bbk123

Я имею сообщить, что это очень оригинальный подход к изучению Rust и ЯП вообще. Что касается бодуна — те, кто выпивал, на ЛОР еще и не думали выползать. Потому что я, как посмотрю, в живых активных тредах после НГ чуть ли не одни и те же лица только мелькают.

Virtuos86 ★★★★★
()
Ответ на: комментарий от tailgunner

Браузера кода иногда недостаточно.

bbk123 ★★★★★
() автор топика
Ответ на: комментарий от Virtuos86

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

bbk123 ★★★★★
() автор топика

как вы дебагируете свой код?

Пишем тесты.

k_andy ★★★
()
Ответ на: комментарий от Virtuos86

Да так можно долго дебагировать здесь на ЛОРе)

dave ★★★★★
()

Во-первых, расте+карго хорошо сделана поддержка юнит тестов. Во-вторых, при панике или ассерте, он умеет выводить в консоль стектрейс, о том, где и что случилось. Я так и отлаживаю. В отдельном дебаггере необходимости не возникало.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

После Java+Maven+JUnit всё это не выглядит каким-то достижением. Но иногда хочется посмотреть как работает чужой код. В этом случае дебагер невозможно заменить никакими юнит тестами и стектрейсами.

bbk123 ★★★★★
() автор топика
Ответ на: комментарий от bbk123

возможность дебагировать сторонний код

Во-первых, по-русски, это называется «отлаживать», как тебе уже писали выше. Во-вторых, rustDT для эклипса https://github.com/RustDT/RustDT/blob/latest/documentation/Features.md#features

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Во-первых по-русски это можно называть по-разному и слово «дебагировать» образовано точно так же, как и «компилировать». Прошу больше тут филологических споров не устраивать. Во-вторых RustDT уже год как умер, о чём я писал выше.

bbk123 ★★★★★
() автор топика

Простой пример когда необходим дебагер

use std::io;

fn main() {
    println!("Введите число");
    let mut guess = String::new();
    io::stdin().read_line(&mut guess).expect("Не удалось прочитать строку");
    println!("{}", guess);

    let num: i32 = guess.parse().expect("Не число");
    println!("{}", num);
}

Этот код компилируется, но содержит ошибку и поэтому падает на guess.parse().expect("Не число"). Проблема возникает внутри parse(). В Rust нет исключений и стектрейс создаётся лишь в expect("Не число"), тоесть слишком поздно и без какой-то полезной для меня информации - лишь замусоривает экран. Хорошо хоть то, что до стектрейся не забыли написать thread 'main' panicked at 'Не число: ParseIntError { kind: InvalidDigit }', src\libcore\result.rs:906:4. Какой именно это InvalidDigit и в каком месте строки он находится тут не сообщается. Первое, что приходит в голову в такой ситуации - посмотреть в дебагере что же такое нехорошее просочилось в строку. Разумеется можно забыть про дебагер, немного помедитировать и догадаться, что ему мешают символы перехода на новую строку и нужно предварительно вызвать guess.trim(). Но я не индус и не хочу медитировать. Это довольно тривиальный пример. В более сложном случае без дебагера наверное придётся достичь уровня Будды.

bbk123 ★★★★★
() автор топика
Ответ на: комментарий от mersinvald

Да, тоже вариант. Но никак не более быстрый. Ведь он подразумевает компилирование. А в дебагере я просто брейкпоинт поставил и уже смотрю. И опять же, в чужом коде такой трап не сделать.

bbk123 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.