170 похожих чатов

Ребят, добрый день! Я же ничего не путаю: когда мы

врапаем ошибку через fmt.Errorf, стек трейса там не оказывается, верно? Надо использовать для этого github.com/pkg/errors

17 ответов

22 просмотра

еще есть https://pkg.go.dev/golang.org/x/xerrors

да, там нет стектрейса, и не будет 🙁 я дошел до того, что добавляю на каждом уровне строку, чтобы понять, откуд file not found лезет

Alexey-Popov Автор вопроса
Daniel Podolsky
да, там нет стектрейса, и не будет 🙁 я дошел до т...

Вариант, но проще, все же, врапнуть ошибку, я думаю

Alexey Popov
Вариант, но проще, все же, врапнуть ошибку, я дума...

так я враппингом стандартным и добавляю

Andrey Burov
покажите пример плиз

``` package errwithplace import ( "fmt" "runtime" "github.com/jpillora/longestcommon" ) var myPlace = getCaller(-1) func getCaller(skip int) string { funcName := "UNKNOWN" pc, f, l, ok := runtime.Caller(skip + 1) if ok { funcName = runtime.FuncForPC(pc).Name() } _, _, _, _ = pc, f, l, funcName return fmt.Sprintf("%s:%d", f, l) //return funcName } func getCallerShort(skip int) string { names := []string{ getCaller(skip + 1), myPlace, } longestcommon.TrimPrefix(names) return names[0] } func Wrap(err error) error { if err != nil { return fmt.Errorf("%q: %w", getCallerShort(1), err) } return nil } ```

добрый, трейса нет, но если возвращать неповторяющиеся строки в каждом фрагменте кода, то по сути это некий аналог трейса. return fmt.Errorf("this is unique string returned only here 1: %w", err) на выходе имеем что-то типа "this is unique string returned only here 1: this is unique string returned only here 2: original error" чем не трейс? Похоже это то, что @onokonem описал

Elmanov Anton
добрый, трейса нет, но если возвращать неповторяющ...

тем что оно обычно не включает в себя строки в исходниках и имя функции

c
тем что оно обычно не включает в себя строки в исх...

строка перед ": %w" должна быть уникальной, тогда вам понятно, какая это функция.

Elmanov Anton
строка перед ": %w" должна быть уникальной, тогда ...

не должна она быть уникальной, она должна описывать ошибку и ее контекст

Andrey Burov
ИМХО так себе затея...

сейчас имею проект с таким подходом и гугл стек - в принципе сразу определяю весь стек по логу

c
не должна она быть уникальной, она должна описыват...

https://github.com/uber-go/guide/blob/master/style.md#error-wrapping собственно

Elmanov Anton
сейчас имею проект с таким подходом и гугл стек - ...

получив ошибку "lalablabla123: file not found" как искать и как понять о чем это вообще и где искать?

c
не должна она быть уникальной, она должна описыват...

похоже у нас с вами трудности понимания. приведу пример. у нас одна функция вызывается из двух других. На выходе у нас будет ошибка failed to a from b: failed to request 3rd party: some err или failed to a from с: failed to request 3rd party: some err Ведь понятен же стек? Причем сделать сообщения разными не составляет труда - это разные функции и давать они должны разный текст ошибки. Если у вас в коде разные функции пишут одинаковые логи - это надо исправлять пока не поздно (потом закопаетесь совсем). Собственно код: func a () error { // err := ... some 3rd party request return fmt.Errorf("failed to request 3rd party: $w", err ) } func b () error { if err := a(); err != nil { return fmt.Errorf("failed to a from b: %w", err ) } return nil } func c () error { if err := a(); err != nil { return fmt.Errorf("failed to a from c: %w", err ) } return nil }

Andrey Burov
получив ошибку "lalablabla123: file not found" как...

искать код, который пишет lalablabla123.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта