Repository navigation
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()underusing namespace std;(in the file, the function, or an included header)- After
using std::thread;, throughusing Worker = std::thread;ornamespace 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_backinto a vector ofstd::jthread- A bare
threadthe file never brings in: a guess
- C++: calls and types through
using ns::f;, a namespace alias (namespace io = lib::net;), ausing namespaceinside a function or in a header — exact links instead of name matches;Router r(cfg);counted as creating aRouter - 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, C11thrd_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 (
SIGTERMofdocker 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, C11thrd_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