Skip to content

Releases

v0.6.0

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

v0.5.11

Choose a tag to compare

@github-actions github-actions released this 11 Nov 02:31
3938655

Added

  • Class details: Where members are read and written — each member says how many functions read and write it,
    following chains through member types and base classes (cfg.link.peer.port, p->len = 0, self.port, a bare
    port_ in a method). Open one to see those lines and light the functions up: blue reads, orange writes.
  • Python: self.cfg = cfg gives the member the type of the parameter (or local) it is set from.
  • Timeline: drag the swimlanes sideways to move the view, and Shift + wheel moves it too (down: earlier,
    up: later). Dragging the playhead or the time axis still scrubs, and a click still jumps to that moment.

Changed

  • Opening and closing a block, changing the level or the focus no longer jumps: the block you clicked stays where it
    is, blocks slide and resize to their new places, what opens grows out of its block and what closes folds into
    it; wires fade in once everything has arrived. Off when the system asks for reduced motion.
  • While playing, the view no longer jumps back to the playhead after you move it; play or a click brings it back.

Fixed

  • Class details: Python types are looked up through the file's imports, so two classes with the same name in
    different modules stay apart (from .models import Config, from .legacy import Config as LegacyConfig,
    import legacy as old → old.Config, imports under if TYPE_CHECKING:, Optional[Config], Config | None,
    "Config").
  • Class details, C/C++: a struct defined with the same name in two files is the one of the file that writes the
    type (or a header it includes), and typedef struct buffer buffer_t;, typedef Packet Datagram; and
    using Frame = Packet; count as the class even when it is defined in another file.
  • Where it returns lists only the function's own return statements: those of a lambda or a local class
    written inside it no longer show up (a void function holding [] { return g(); } says it has no return).
  • A return spread over several lines, or written in a one-line block (if (ok) { return g(a, b); }), is shown
    whole, from return to its own ;.
한국어

추가

  • 클래스 상세: 멤버를 읽고 쓰는 곳 — 멤버마다 그 멤버를 읽는 함수와 쓰는 함수가 몇 개인지 보여 줘요. 멤버 타입과 부모
    클래스를 따라가요(cfg.link.peer.port, p->len = 0, self.port, 메서드 안의 port_). 펼치면 그 줄들이 나오고
    회로에서 그 함수들이 빛나요. 파랑은 읽기, 주황은 쓰기예요.
  • Python: self.cfg = cfg처럼 매개변수(또는 지역 변수)를 넣은 멤버는 그 타입을 가져요.
  • 타임라인: 레인을 좌우로 끌어 보이는 구간을 옮기고, Shift + 휠로도 옮겨요(아래: 앞쪽, 위: 뒤쪽). 재생 위치 막대나
    시간 눈금을 끌면 지금처럼 그 시점으로 옮겨 가고, 클릭하면 그 시점으로 이동해요.

변경

  • 블록을 펼치거나 접을 때, 단계나 집중 보기를 바꿀 때 화면이 튀지 않아요. 누른 블록은 제자리에 있고, 블록들이 새 자리로
    미끄러지며 크기가 바뀌어요. 펼친 블록 안의 항목은 그 블록에서 자라나고, 접는 항목은 블록 안으로 접혀 들어가요. 전선은
    다 도착한 뒤에 나타나요. 시스템에서 동작 줄이기를 켜 두면 애니메이션을 하지 않아요.
  • 재생 중에 보이는 구간을 옮겨도 재생 위치로 다시 튀지 않아요. 재생을 다시 누르거나 클릭하면 따라가기가 돌아와요.

수정

  • 클래스 상세: Python 타입은 그 파일의 import를 보고 찾아요. 모듈만 다르고 이름이 같은 클래스를 섞지 않아요
    (from .models import Config, from .legacy import Config as LegacyConfig, import legacy as old → old.Config,
    if TYPE_CHECKING: 안의 import, Optional[Config], Config | None, "Config").
  • 클래스 상세, C/C++: 같은 이름의 구조체가 두 파일에 따로 있으면 그 타입을 적은 파일(또는 그 파일이 포함한 헤더)의 것으로
    봐요. typedef struct buffer buffer_t;, typedef Packet Datagram;, using Frame = Packet;도 클래스가 다른 파일에
    정의돼 있어도 그 클래스로 쳐요.
  • 반환하는 곳에 그 함수의 return만 나와요. 함수 안에 적은 람다나 지역 클래스의 return은 더 이상 섞이지 않아요
    ([] { return g(); }를 가진 void 함수는 return 문이 없다고 나와요).
  • 여러 줄에 걸친 return이나 한 줄 블록 안의 return(if (ok) { return g(a, b); })을 return부터 그 문장의 ;까지
    통째로 보여 줘요.

Full Changelog: v0.5.10...v0.5.11

v0.5.10

Choose a tag to compare

@github-actions github-actions released this 11 Nov 00:54
214608f

Added

  • Published to Open VSX as well, so Cursor, VSCodium, Windsurf and Theia can install it from their own extension view.
한국어

추가

  • Open VSX에도 올라가요. Cursor, VSCodium, Windsurf, Theia에서도 확장 뷰에서 바로 설치할 수 있어요.

Full Changelog: https://github.com/21HoKim/code-graph/commits/v0.5.10

v0.5.9

Choose a tag to compare

@github-actions github-actions released this 09 Nov 09:24

Changed

  • Reworded the 0.5.8 notes.
한국어

변경

  • 0.5.8 기록 문구를 다듬었어요.

Full Changelog: https://github.com/21HoKim/code-graph/commits/v0.5.9

v0.5.8

Choose a tag to compare

@github-actions github-actions released this 09 Nov 08:03

Added

  • Class details: under each class that holds it as a member, where that class goes on to (the classes holding it,
    the functions taking it), so a chain like Address → Customer.address → Order.customer can be
    followed up.

Fixed

  • Held as a member by, Taken as a parameter by and Returned by find types written partly qualified
    (billing::Customer inside shop) and look names up from the scope they are written in, so two
    classes with the same name in different namespaces (billing::Address, shipping::Address) are no longer mixed up.
한국어

추가

  • 클래스 상세: 이 클래스를 멤버로 가진 클래스마다, 그 클래스가 다시 어디로 가는지(그걸 멤버로 가진 클래스, 매개변수로
    받는 함수)도 보여 줘요. Address → Customer.address → Order.customer처럼 위로 따라갈 수 있어요.

수정

  • 멤버로 가진 클래스, 매개변수로 받는 함수, 반환하는 함수가 네임스페이스 일부만 붙인 타입(shop 안의
    billing::Customer)도 찾아요. 이름은 그 타입이 적힌 스코프에서부터 찾아서, 네임스페이스만 다르고 이름이 같은
    클래스(billing::Address, shipping::Address)를 더 이상 섞지 않아요.

Full Changelog: v0.5.7...v0.5.8

v0.5.7

Choose a tag to compare

@github-actions github-actions released this 09 Nov 05:06

Full Changelog: v0.5.6...v0.5.7

v0.5.6

Choose a tag to compare

@github-actions github-actions released this 09 Nov 05:00

Full Changelog: v0.5.5...v0.5.6

v0.5.5

Choose a tag to compare

@github-actions github-actions released this 09 Nov 04:15

Full Changelog: v0.5.4...v0.5.5

v0.5.4

Choose a tag to compare

@github-actions github-actions released this 09 Nov 02:19

Full Changelog: v0.5.3...v0.5.4

v0.5.3

Choose a tag to compare

@github-actions github-actions released this 09 Nov 01:18

What's Changed

  • Colour the preview whatever theme lookup finds; show it sooner by @21HoKim in #3

Full Changelog: v0.5.2...v0.5.3