Skip to content

v0.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 11 Nov 11:18

Added

  • examples/ in the repository
    • Per-feature folders for C, C++ and Python (calls, threads, classes, returns, trace, failures, live, problems), each with a checklist
    • Realistic example programs (formerly samples/)
  • Container cards: one card per container on the right of the circuit, live and in the replay, when there are several
    • Contents: running or how it ended, threads, calls, calls per second, activity
    • Click: only that container's code and threads / Ctrl (⌘) + click: add or remove
    • ⧉: own view, also while live (that view follows its container live)
    • Choice carried over from the live view into the replay
  • Live view: swimlanes of every thread's stack, scrolling with the run
    • Drag back or Shift + wheel: an earlier moment / Now: follow again
    • Thread click: only that thread followed in the circuit
  • Timeline: horizontal scrollbar under the swimlanes when zoomed in
    • Thumb = part of the run in view; drag, or click beside it for one view's width
  • Legend: folds to its title (click Legend), stays folded
    • More than eight threads: +N more for the full list inside the legend, scrolled by the wheel
    • Wheel over the legend or the container cards: scrolls them instead of zooming the circuit

Changed

  • Timeline wheel
    • Wheel: swimlanes up and down
    • Ctrl (⌘) + wheel, trackpad pinch: zoom around the pointer
    • Shift + wheel reversed: down = later (right), up = earlier (left)
  • Circuit: Shift + wheel moves sideways with any mouse (down = right); before, only when the browser turned it into a sideways scroll, zoom otherwise
  • A view per container: a list of containers (threads, calls, how each ended) instead of opening all at once; only the ticked ones opened, each in its own column beside the circuit

Fixed

  • C++: threads started without std::
    • thread(&Server::run, this).detach() under using namespace std; (in the file, the function, or an included header)
    • After using std::thread;, through using Worker = std::thread; or namespace b = boost;
    • std::thread t(worker); (read as a variable, not a function), std::thread t{worker};
    • Thread members started in a constructor's initializer list (: rx_(&Router::rxLoop, this)) or a default member initializer
    • emplace_back into a vector of std::jthread
    • A bare thread the file never brings in: a guess
  • C++: calls and types through using ns::f;, a namespace alias (namespace io = lib::net;), a using namespace inside a function or in a header — exact links instead of name matches; Router r(cfg); counted as creating a Router
  • Python: thread and task APIs imported under another name (from threading import Thread as T, from asyncio import create_task as spawn)
  • Run & Trace (C/C++): each thread's parent and starting function recorded by the run itself instead of guessed
    • pthread_create, C11 thrd_create, std::thread, std::async
    • Lanes branching off the right thread; ⚡ wires even when the analysis cannot tell the function (a function pointer)
    • Python threads: starting function recorded as well
    • Statically linked programs: the guess as before
  • Run & Trace (C/C++): an object a thread receives as void* named by the type another function gives it (struct counter*)
  • Run & Trace with Docker Compose: a container ended by ■ Stop or the time limit shown as stopped, not as a failure with exit code 143 (SIGTERM of docker stop; also 130 and 137)
  • Run & Trace (C/C++): no lost trace lines when a busy thread's buffer fills up in the middle of a call
  • Timeline: speed list readable in every theme (the open list used the theme's text colour on the system's background, only the chosen speed visible)
한국어

추가

  • 저장소의 examples/
    • C·C++·Python별 기능 폴더(calls, threads, classes, returns, trace, failures, live, problems)와 확인표
    • 실제 코드에 가까운 예제 프로그램(예전 samples/)
  • 컨테이너 카드: 컨테이너가 여럿일 때 실시간 보기·재생 모두 회로 오른쪽에 컨테이너별 카드 표시
    • 카드 내용: 실행 중·종료 상태, 스레드·호출 수, 초당 호출, 활동 그래프
    • 클릭: 그 컨테이너의 코드·스레드만 표시 / Ctrl(⌘) + 클릭: 선택 추가·제외
    • ⧉ 버튼: 별도 창 열기(실행 중에도 가능, 그 창은 해당 컨테이너 실시간 추적)
    • 실시간 보기에서 고른 선택의 재생 유지
  • 실시간 보기: 스레드별 호출 스택 레인이 실행을 따라 흐르는 화면
    • 끌기 또는 Shift + 휠: 지난 시점 보기 / 지금으로 버튼: 다시 따라가기
    • 스레드 클릭: 회로에서 그 스레드만 추적
  • 타임라인: 확대 시 레인 아래 가로 스크롤바 표시
    • 막대 = 지금 보이는 구간, 끌기·막대 옆 클릭으로 한 화면씩 이동
  • 범례: 제목만 남기는 접기 기능(범례 제목 클릭), 접은 상태 유지
    • 스레드 9개 이상: +N개 더 버튼으로 범례 안 전체 목록 휠 스크롤
    • 범례·컨테이너 카드 위 휠: 회로 확대 대신 상자 스크롤

변경

  • 타임라인 휠
    • 휠: 레인 위아래 스크롤
    • Ctrl(⌘) + 휠, 트랙패드 핀치: 포인터 위치 기준 확대·축소
    • Shift + 휠 방향 반전: 아래 = 뒤쪽(오른쪽), 위 = 앞쪽(왼쪽)
  • 회로도: Shift + 휠로 좌우 이동(아래 = 오른쪽), 전에는 브라우저의 가로 스크롤 변환 때만 이동하고 그 밖엔 확대·축소
  • 컨테이너별로 보기 메뉴: 모든 컨테이너 일괄 열기 대신 목록(스레드·호출 수, 종료 상태)에서 체크한 것만 회로도 옆에 하나씩 열기

수정

  • C++: std:: 없이 띄운 스레드 인식
    • using namespace std;(파일, 함수 안, 포함한 헤더) 아래의 thread(&Server::run, this).detach()
    • using std::thread; 이후, using Worker = std::thread;·namespace b = boost; 경유 이름
    • std::thread t(worker);(함수 선언이 아닌 변수로 해석), std::thread t{worker};
    • 생성자 초기화 목록(: rx_(&Router::rxLoop, this))·멤버 기본 초기화로 시작하는 스레드 멤버
    • std::jthread 벡터의 emplace_back
    • 파일이 가져오지 않은 맨이름 thread: 추정 표시
  • C++: using ns::f;, 네임스페이스 별칭(namespace io = lib::net;), 함수 안 using namespace, 헤더의 using namespace를 거친 호출·타입의 정확한 연결(이름 추측 대신), Router r(cfg);의 Router 생성 집계
  • Python: 다른 이름으로 가져온 스레드·태스크 API 인식(from threading import Thread as T, from asyncio import create_task as spawn)
  • 실행 추적(C/C++): 스레드별 부모 스레드·시작 함수의 실행 중 직접 기록(추측 대신)
    • 대상: pthread_create, C11 thrd_create, std::thread, std::async
    • 결과: 올바른 부모 스레드에서 갈라지는 레인, 분석이 모르는 경우(함수 포인터)에도 ⚡ 전선 표시
    • Python 스레드: 시작 함수 기록
    • 정적 링크 프로그램: 기존 추정 방식 유지
  • 실행 추적(C/C++): 스레드가 void*로 받은 객체에 다른 함수가 붙인 타입(struct counter*) 이름 표시
  • Docker Compose 실행 & 추적: ■ 멈추기·시간 제한으로 끝난 컨테이너의 종료 코드 143(docker stop의 SIGTERM, 130·137 포함)을 실패 대신 멈춤으로 표시
  • 실행 추적(C/C++): 바쁜 스레드의 버퍼가 호출 중간에 가득 찰 때의 추적 줄 손실 해결
  • 타임라인: 배속 목록의 모든 테마 가독성 확보(전에는 펼친 목록이 시스템 배경에 테마 글자색으로 그려져 고른 배속만 보이는 문제)

Full Changelog: v0.5.11...v0.6.0