Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1429. #ЗаметкиНаПолях Создание Дампа при Зависании Тестов на CI-машине Когда на вашем компьютере возникают проблемы, отлаживать их просто, так как вы можете легко подключить отладчик и посмотреть, что происходит. Но если тесты зависают в CI/CD конвейере подключить отладчик не так просто. Приходится искать альтернативный способ отладки проблемы. dotnet test имеет много полезных опций. Одной из них является --blame-hang, которая позволяет сделать дамп процесса и всех дочерних процессов, когда тест зависает. Вы можете настроить желаемый тайм-аут и тип дампа, который хотите сделать. Затем можно загрузить дамп в артефакты сборки и проанализировать его локально:
dotnet test 
 --blame-hang-timeout 5m 
 --blame-hang-dump-type full

Если тест зависает, он завершается с ошибкой и выводит как минимум два файла: файл дампа для каждого процесса и файл последовательности. Файл последовательности содержит список тестов, которые выполнялись до зависания. Если вы используете CI, например GitHub Actions, вы можете загрузить файл дампа как артефакт:
name: sample
on:
  workflow_dispatch:
  push:
    branches:
      - '*'

jobs:
  run_test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Run tests
      run: dotnet test a.sln --configuration Debug --blame-hang-timeout 30s

    - uses: actions/upload-artifact@v3
      if: always()
      with:
        name: results
        retention-days: 1
        path: TestResults/**/*

Источник: https://www.meziantou.net/generating-a-dump-file-when-tests-hang-on-a-ci-machine.htm