LINUX.ORG.RU

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

 


0

5

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

★★★★★

Не пользуемся Idea.

А вообще что тебе дебажить надо? Отладчик нужен только для ансейфа, с многопоточкой и/или асинхронностью он та вообще не сильно товарищ, только логи.

mersinvald ★★★★★
()
Последнее исправление: mersinvald (всего исправлений: 1)

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

Не «дебагируете», а «дебажите». Если, конечно, не подразумевалась пантера Багира из «Маугли» :).

Дебажу println'ами. Или велосипедными логгерами:

use std::fs::OpenOptions;

const DEBUG: bool = true;

pub fn log<S: Into<String>>(message: S) -> Result<()> {
    if !DEBUG { return Ok(()) };
    let mut message: String = message.into();
    message.push_str("\n\n=====================================================\
                      ===========================\n\n");
    OpenOptions::new()
        .append(true)
        .create(true)
        .open("log.txt")?
        .write_all(message.as_bytes())?;
    Ok(())
}

macro_rules! log {
    ($t:expr) => (log($t).unwrap())
}

fn main() {
    log!("WARNING");
}
Или пишу логи еще более велосипедистыми велосипедами:
extern crate decorators;
use decorators::decorators;

pub fn logger<T: Debug>(message: &str, arg: T) -> T {
    log(format!("{}: {:?}", message, arg )).unwrap();
    arg
}

#[decorators(logger("`foo` return"))]
pub fn foo(arg: i32) -> f64 {
    ...
}

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)

Дебаг для rust работает в CLion, т.к. он может работать с GDB.

Либо используй VS Code с плагинами.
Но у VS Code скажем мягко хреновенький комплит кода.

Так что лучший вариант на сегодняшний момент это CLion, но он за бабки.

WatchCat ★★★★★
()
Последнее исправление: WatchCat (всего исправлений: 1)

Отладка

Есть замечательное русское слово «отладка», соответственно «отлаживаете» — и не придется коверкать язык.

CrossFire ★★★★★
()

и плагин под IntelliJ для Rust

Это такой новый вид извращения, использовать для быстрого и компилируемого языка тормозные и убогие поделки на Java, плагины поддержки языков к которым накрутили какие-то васяны?

EXL ★★★★★
()

Отладчик нужен ровно в одном случае - реверс инжинирить бинарный код, и ЯВУ на котором он был написанткт совершенно побоку. Даже чтобы получить бектрейс из корки отладчик не нужен. Зачем он тебе?

anonymous
()

Я даже под Java/C++ давненько уже не использую дебаг. Необходим был, пока не встретился с многопоточным кодом, да опыта было слишком мало для того, чтобы обходиться текстовыми логами. Теперь - только вдумчивый анализ логов. Хотя фиг знает, медленнее ли, быстрее ли стал анализировать ошибки.

Deleted
()
Ответ на: комментарий от I-Love-Microsoft

тащемта в любом кто поддерживает gdb.
помнится был даже просто гуёвый фронтенд для gdb.
т.е. с отображением и подсветкой кода.

хотя конечнго тру поцаны просто в gdb могут, без всяких прослоек.
но они старые и бородатые.

WatchCat ★★★★★
()
Последнее исправление: WatchCat (всего исправлений: 2)
Ответ на: комментарий от I-Love-Microsoft

Да. rust поддерживает gdb (ну или на оборот). Оно даже строку в файле показывает.

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

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

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

Ну если не сравнивать с идеевским, то может и отличный.
Но мне он как-то не очень.

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

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

Для этого есть println.

который умеет писать в файл?

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

gdb умеет дебагировать на уровне исходного кода в Rust? Логи, точнее трейсы, подходят лишь когда речь идёт о своём коде. А если я хочу посмотреть как работает чужой код, например сторонняя библиотека?

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

Хз, мы микросервисы пишем, по этому возможно кодовые базы не очень большие, racer почти никогда проблем не вызывал.

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

Хум хау.
Я бы скорее назвал его приемлемым.

WatchCat ★★★★★
()

Дебагирование? Итс вери интересно. А ю рили врайтинг ин Руст?

dave ★★★★★
()

Да, ладно, что вы пристали к юному человеку?) Он или слишком юн, и плохо относится к русскому языку, или иностранец, и тогда просто плохо знает язык

dave ★★★★★
()

Не пользуюсь Intellij Idea, когда-то в VS Code тыкал плагин, но в итоге остался им недоволен. Читаю что написал и пишу тесты - нужды в отладчике не ощущаю.

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

На сколько я понял проблема с IntelliJ заключается лишь в жадности разработчиков. Для поддержки интерактивного дебагирования кода на Rust в IntelliJ необходимо использовать определённую функциональность CLion, а он лишь за деньги - комьюнити версии нет.

Есть ещё RustDT - плагин под Eclipse. В нём есть поддержка интерактивного дебагирования. Но год назад автор этого плагина объявил, что прекращает разработку вообще всего под Eclipse.

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

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

Дебажу println'ами. Или велосипедными логгерами:

Это не дебагирование, это трассирование.

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

https://en.wikipedia.org/wiki/Tracing_(software)

In software engineering, tracing involves a specialized use of logging to record information about a program's execution.



P.S. убери, пожалуйста, ещё одного озабоченного филолога между нашими сообщениями.

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

In software engineering, tracing involves a specialized use of logging to record information about a program's execution.

Просто для протокола: tracing - это штатная возможность программы, остающаяся в ней даже в продакшене; printf debugging - вставка печати с целью обнаружения проблемы, печать удаляется после обнаружения упомянутой проблемы.

P.S. убери, пожалуйста, ещё одного озабоченного филолога между нашими сообщениями.

Думаю, это бесполезно, пока ты продолжаешь «дебагировать».

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

печать удаляется после обнаружения упомянутой проблемы.

Это непринципиальная разница в реализации. Процесс тот же.

Думаю, это бесполезно, пока ты продолжаешь «дебагировать».

Нет, это не бесполезно, пока те же самые люди продолжают компилировать. Хотя у меня закралось сомнение, что они это умеют, поскольку слишком уж заняты филологическим срачем в неотносящейся к филологии теме.

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

P.S. убери, пожалуйста, ещё одного озабоченного филолога между нашими сообщениями.

Думаю, это бесполезно, пока ты продолжаешь «дебагировать».

Прикольно. Да вы же новое слово изобрели! Осталось придать ему только правильный и всем понятный смысл. Но это точно будет не «отладка»...

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

Дебажу println'ами. Или велосипедными логгерами:

Это не дебагирование, это трассирование.

Формально - да. А фактически, даже если я буду внимательно смотреть на код, чесать тыковку и усиленно недоумевать, где тут происходит неладное — даже этот процесс можно назвать «дебагированием». Иногда инсайт приходит на следующий день, а значит, дебагирование продолжается даже в повседневной жизни.

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

«Дебагирование» это работа (с) дебаггером, что тут непонятного?

Дебаггер -> дебагирование
Логгер -> логирование

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