Не удалось проанализировать трассировку: нет события EvFrequency

Я генерирую такой след:

func main() {
    f, err := os.Create("trace.out")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    err = trace.Start(f)
    if err != nil {
        panic(err)
    }
    defer trace.Stop()
//this is my app:
    http.HandleFunc("/", someFunc)
    log.Fatal(http.ListenAndServe(":5000", nil))
}

Затем я запускаю CLI:

$ go run main.go

Обновите браузер, создается trace.out, 1,8 МБ, затем:

$ go tool trace trace.out
018/09/09 13:25:18 Parsing trace...
failed to parse trace: no EvFrequency event

Что мне здесь не хватает? Спасибо.

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
2
0
691
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Данные трассировки можно просмотреть только после того, как вы остановили трассировку (то есть после вызова trace.Stop()). В коде, который вы предоставили, http.ListenAndServer(...) будет заблокирован навсегда (если не возникнет ошибка).

Вы пытаетесь просмотреть трассировку до того, как трассировка будет остановлена?

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

func main() {
    f, err := os.Create("trace.out")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    err = trace.Start(f)
    if err != nil {
        panic(err)
    }
    defer trace.Stop()

    http.HandleFunc("/", someFunc)
    go func() {
        log.Fatal(http.ListenAndServe(":5000", nil))
    }()

    signalChan := make(chan os.Signal, 1)
    signal.Notify(signalChan, os.Interrupt)
    <-signalChan
}

Другие вопросы по теме