오랫동안 사용하던 Source Insight 를 어쩔 수 없이 버려야 할 시점이 온 것 같다.

많은 사용자가 사용 중인 VSCODE 를 어그적 어그적 사용 중이다.

(아직도 너무 어색해서 돌아갈까 말까를 매일 고민 중... ㅠ-ㅠ)

막강한 플러그인들이 있어 이걸 활용해 보는게 좋을 것 같다.

UML이란?

통합 모델링 언어 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

통합 모델링 언어 - 위키백과, 우리 모두의 백과사전

통합 모델링 언어(UML, 영어: Unified Modeling Language)는 소프트웨어 공학에서 사용되는 표준화된 범용 모델링 언어이다.[1] 이 표준은 UML을 고안한 객체 관리 그룹에서 관리 하고 있다. UML은 소프트웨

ko.wikipedia.org

아무튼 많이들 쓰고 있는데 이래 저래 그림을 그리고 있느니 간단하게 코드화 해서 작성하면

동일하게 그려주는 녀석이다.

문법은 굳이 외울 것 없이 아래 사이트 띄워놓고 찾아가며 쓰면 된다.

간단한 텍스트를 이용하여 멋진 UML 다이어그램을 만들 수 있는 오픈소스 도구입니다. (plantuml.com)

 

간단한 텍스트를 이용하여 멋진 UML 다이어그램을 만들 수 있는 오픈소스 도구입니다.

간단한 텍스트를 이용하여 쉽게 멋진 UML 다이어그램을 만들 수 있으며, 다양한 종류의 다이어그램을 제공하고 있습니다. 또한, 생성된 다이어그램을 PNG, LaTeX, EPS, SVG 와 같은 이미지로 변환할 수

plantuml.com

설치는 VSCODE -> 확장 -> PlantUML 단계로 가서 설치하면 끝~!!!

 

import sys
import re
import os

sohead = re.compile('(.+\.so):')
funchead = re.compile('([0-9a-f]{8}) <(.+)>:')
funcline = re.compile('^[ ]+([0-9a-f]+):.+')

def parsestack( lines, libname ):
crashline = re.compile('.+pc.([0-9a-f]{8}).+%s' % libname )
ret = []
for l in lines:
m = crashline.match(l)
if m:
addr = m.groups()[0]
ret.append(int(addr,16))
return ret

def parseasm( lines ):
ret = []
current = None
restartcode = False;
for l in lines:
m = funchead.match(l)
if m:
if current:
ret.append(current)
startaddr, funcname = m.groups()
current = [ funcname, int(startaddr,16), int(startaddr,16), int(startaddr,16), [] ]
continue
m = funcline.match(l)
if m:
restartcode = True;
addr = m.groups()[0]
if current != None:
current[3] = int(addr,16)
continue
m = sohead.match(l)
if m:
so = m.groups()[0]
so = os.path.split(so)[1]
continue

#Assume anything else is a code line
if restartcode:
# print 'XXX',l
restartcode = False;
ret.append(current)
current = [ current[0], current[1], current[3], current[3], [] ]
if current != None:
current[4].append(l);

return so, ret

if __name__=="__main__":
asm, stack = sys.argv[1],sys.argv[2]

libname, asm = parseasm( file(asm).read().split('\n') )
stack = parsestack( file(stack).read().split('\n'), libname )
for addr in stack:
for func, funcstart, segstart, segend, code in asm:
if addr >= segstart and addr <= segend:
print "0x%08x:%32s + 0x%04x %s" % ( addr, func, addr-funcstart, "".join(["\n"+x for x in code]))

+ Recent posts