ํน์ฑ ๊ฐ์ฒด ( ~T
๋ฐ @T
์ฌ๊ธฐ์ T
๋ ํน์ฑ)๋ ๊ตฌํ์ ์จ๊ธฐ๊ณ ๊ฐ์ ๋ฉ์๋ ๋์คํจ์น ํ
์ด๋ธ (์ : vtable)์ ์ ๋ฌํ๋ ๊ฐ์ฒด์
๋๋ค.
๋ฐ๋ผ์ ๋ ๊ฐ์ง :
info vtbl
๋๋ info vtable
). gdb๊ฐ ๋์ผํ ๋ฐฉ์์ผ๋ก vtables๋ ์ถ๋ ฅ ํ ์ ์๋๋ก ๋๋ฒ๊ทธ ์ ๋ณด๋ฅผ ๋ง์ฌ์ง ํ ์ ์๋ค๋ฉด ๋ฉ์ง ๊ฒ์
๋๋ค.์์ต๋๋ค.
ํธ๋ ์ด ํธ์ ๋๋ฒ๊ทธ ํํ์ ๋ฌด์์ ๋๊น? ๋๋ Trait์ ๋ฐํ์์ ๋๋ฌ ํ ๋ ์ง์์ง๋ ์์ ํ ์ปดํ์ผ ํ์ ์ํฐํฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@jdm ์ด๊ฒ์ @Trait ๊ฐ์ฒด๋ฅผ์ํ ๊ฒ์ ๋๊น?
์, ํน์ฑ ๊ฐ์ฒด (~ ๋ฐ @ ๋ค์์ฑ)๋ฅผ ํฌํจํ๋๋ก ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
middle/trans/debuginfo.rs
์ ๋ฐ๋ฅด๋ฉด : cx.sess.span_note(span, "debuginfo for trait NYI");
์ฆ, ์ด๊ฒ์ ์ฌ์ ํ โโ์ ํจํ๊ณ ์ ์ ํ๊ฒ ํ๊ทธ๊ฐ ์ง์ ๋๊ณ ์ด์ ํ๊ฐ ์ง์ ๋ฉ๋๋ค (2013-06-19).
๋ถ๋ฅ ๋ฐฉ๋ฌธ; @michaelwoerister๋ก ์ฐ๊ธฐํฉ๋๋ค.
๋ถ๋ฅ ๋ฐฉ๋ฌธ; @michaelwoerister๋ก ์ฐ๊ธฐํฉ๋๋ค.
์ฌ์ ํ NYI์ด์ง๋ง ์ด๋ฒ ๋ฌ ์ธ์ ๊ฐ ๋ค๋ฃจ์ด์ผํฉ๋๋ค.
PR # 9168๋ถํฐ ํน์ฑ ๊ฐ์ฒด์ ๋ํ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ์ง์์ด ์์ต๋๋ค. ํธ๋ ์ด ํธ ๊ฐ์ฒด ํฌ์ธํฐ๋ ์ฌ๋ฐ๋ฅธ ํฌ๊ธฐ (ํฌ์ธํฐ 2 ๊ฐ)์ ์ด๋ฆ ({sigil} {mutability} {trait name})์ด ์ฌ๋ฐ๋ฅธ ๊ตฌ์กฐ์ฒด๋ก ์ค๋ช ๋๋ฉฐ ์ฌ๋ฐ๋ฅธ ๋ค์ ์คํ์ด์ค์ ๋ฐฐ์น๋ฉ๋๋ค. ์ด "ํป ํฌ์ธํฐ"์ ๋ด๋ถ๋ ์์ง ๋ ์ด์ ์ค๋ช ๋์ง ์์ต๋๋ค. ๋น ์ง ๊ฒ์ ํน์ฑ์ ๋ฐฉ๋ฒ์ ๋ํ ์ค๋ช ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ๋ค์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง์ ๋ํด ์ถฉ๋ถํ ์์ง ๋ชปํฉ๋๋ค.
1.0์ด ์๋๋ผ ๋์
@michaelwoerister : ๊ทธ๋ฐ๋ฐ ์๋ก์ด vtable ๋ ์ด์์์ [drop_glue, method, method2, method3, ...]
์
๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ฏธ๋์ supertrait ๋ฉ์๋๊ฐ trait ๊ฐ์ฒด์์ ํธ์ถ ๊ฐ๋ฅํ๊ฒ ๋ ๋ ์ด๋ป๊ฒ ๋ ๋ฐ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
Fat
๊ฐ DST ๊ตฌ์กฐ์ฒด ์ธ Fat<Trait>
์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ DST์์๋ ๋ ๋ณต์กํด์ก์ต๋๋ค. ํน์ฑ ๊ฐ์ฒด์ ๋ํ ์คํ
์ฝ๋๊ฐ ์กฐ๊ธ ๋ ๊นจ์ก์ง๋ง ์คํ
์ผ ๋ฟ์ด๋ฏ๋ก ์์ ํ๊ณ ์ถ์ง ์์ต๋๋ค. ๋๋ ๊ฑฐ๊ธฐ์ FIXME๋ฅผ ๋จ๊ฒผ์ต๋๋ค.
๋ถ๋ฅ ๋ฒํ : ํ์ฌ ์ํ๊ฐ ๋ฌด์์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
์ฌ์ ํํด์ผ ํ ์ผ
๋ค์์ ์ํ ํ ์ ์์ต๋๋ค.
(1) ์ ์ํ๋ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ๊ฐ ํน์ฑ์ ๋ํ ์ ํ ์ค๋ช
์ ์์ฑํ์ญ์์ค. ์์ง DWARF ํ์ค์๋ ํน์ฑ์ด ์์ผ๋ฏ๋ก DW_AT_interface
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํฉ๋ฆฌ์ ์
๋๋ค. ํ์ง๋ง DW_AT_struct
์ฌ์ฉํ๋ฉด C ์งํฅ ๋๋ฒ๊ฑฐ์ ๋ ์ ํธํ๋ฉ๋๋ค.
(2) ํน์ฑ ํฌ์ธํฐ ( &Trait
๋ฑ)๋ฅผ (*(), *OpaqueVTable<Trait>)
์ ํ์ ํํ๋ก ์ค๋ช
ํฉ๋๋ค.
(3) ํป ํฌ์ธํฐ๊ฐ ์ฃผ์ด์ง๋ฉด ํฌ์ธํฐ ๊ฐ๊ณผ ์ ํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ vtable์ ์ธ์ํ๋ Python์์ ์ฌ์ฉ์ ์ง์ GDB / LLDB ๋ช ๋ น์ ๊ตฌํํฉ๋๋ค.
์๋ฒฝํ์ง๋ ์์ง๋ง ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ์๋จ์ผ๋ก ํ ์ ์์ต๋๋ค. vtable์ด ๊ฐ๋ฆฌํค๋ ํจ์์ ์ฌ๋ณผ ์ด๋ฆ์ ํธ๋ ์ด ํธ ๊ฐ์ฒด์ ์ค์ ๋ฐํ์ ์ ํ๋ ๋ํ๋ด์ผํฉ๋๋ค.
๋๋ฒ๊ทธ ์ ๋ณด๊ฐ์๋ ๋น๋์์๋ง (์ฆ, ๋ฆด๋ฆฌ์ค ๋น๋๊ฐ ์๋) ๋งค์ฐ ์ ์ ์๋ง
๋ถ๋ฅ : ์ฌ์ ํํด์ผํฉ๋๋ค. cc @Manishearth @tromey P-low
ํ์ฌ P-low
๋ฐ P-medium
P- ๋งค์ฒด ์ ๊ฑฐ
๋๋ ์ต๊ทผ์ ์ด๊ฒ์ ์กฐ๊ธ ์กฐ์ฌํ์ต๋๋ค. ๋ด๊ฐํ๊ณ ์ถ์ ๊ฒ์ :
DW_AT_containing_type
์ด๋ฅผ ์ํด ์ฉ๋ ๋ณ๊ฒฝ ๋ ์ ์์ต๋๋ค.)๊ทธ๋ฐ ๋ค์ ๋๋ฒ๊ฑฐ๋ ๋ค์์ ์ํํ์ฌ ํธ๋ ์ด ํธ ๊ฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ธ์ ํ ์ ์์ต๋๋ค. ๊ฐ์ ์ ํ์ vtable์ด์๋ ๊ฒฝ์ฐ ํ์ ํญ๋ชฉ์์ vtable์ ๊ฐ์ ธ์ค๊ณ DWARF์์ vtable์ ์ฃผ์๋ฅผ ์กฐํํ์ฌ vtable ์ ํ์ ์ฐพ์ ๋ค์ ๊ตฌ์ฒด์ ์ธ ์ ํ์ ์ฌ์ฉํ์ฌ ํ์ด๋ก๋ ํฌ์ธํฐ๋ฅผ ๋์ฝ๋ฉํฉ๋๋ค.
๋๋์ด ์ผ์ํ๊ณ ์๋ค. rustc๊ฐ ์์ DWARF ํ์ฅ ( DW_AT_containing_type
) ์์ด๋์ด๋ฅผ ๋ด๋๋กํ๋ LLVM ํจ์น๊ฐ ์์ต๋๋ค. vtable์ ๊ธฐ๋ณธ ์ฌํญ (๋ฉ์๋๋ฅผ ๋ด ๋ณด๋ด์ง ์๊ณ ์ฃผ์ ๋ฐ ํฌํจํ๋ ์ ํ)์ ๋ด๋ณด๋ด๋ rustc ํจ์น์ ๋ชจ๋ ๊ฒ์ ์ฝ๊ณ print
์๋ํ๋๋ก ๋ง๋๋ ๋๋ถ๋ถ์ gdb ํจ์น.
์ค๋ ์ฒซ ์ฑ๊ณต :
(gdb) p tu
$1 = traitobjtest::&T {pointer: 0x7fffffffe047 "\027\070\340\377\377\377\177\000", vtable: 0x5555555c34e8 <vtable> "\360\253UUUU\000"}
(gdb) p *tu
$2 = 23
์ ๋๋ค!
LLVM ํจ์น๋ ์ฌ๊ธฐ์ ์์ต๋๋ค : http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20171016/495458.html
phabricator๋ก ์ด๋ํ์ต๋๋ค. https://reviews.llvm.org/D39503 ์ ๋ฐ๋ฅด๋ ๊ฒ์ด ๋ ๊ฐ๋จ ํ ์๋ ์์ต๋๋ค.
ํธ๋ ์ด ํธ ๊ฐ์ฒด๋ฅผ ์ธ์ํ๊ธฐ์ํ gdb ํจ์น๋ ์ฌ๊ธฐ์ ์์ต๋๋ค : https://sourceware.org/ml/gdb-patches/2017-11/msg00289.html
ํํธ 2๋ vtable์ ํ๋๋ฅผ ์ค๋ช
ํ์ฌ ์ํ ํ ์ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ด์ง๋ณด๊ธฐ ์ํด rustc ๋นํธ๋ฅผ ๋ณด์ง ์์์ต๋๋ค. gdb์ info vtbl
๋นํธ๋ ์ด๋ ต์ง ์์ผ๋ฉฐ ๋๋ถ๋ถ ๊ธฐ์กด ๋ช
๋ น์ ์กฐ๊ธ ๋ ๊ฐ์ํํฉ๋๋ค. ๊ฑฐ๊ธฐ์ ์ฌ๋ฐ๋ฅธ ํ๋ ์ด๋ฆ์ด ์์ผ๋ฉด ํน์ฑ ๊ฐ์ฒด์ ๋ํ ๋ฉ์๋ ํธ์ถ์ ๊ตฌํํ๋ ๊ฒ๋ ๊ฐ๋จํด์ผํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
gdb ํจ์น ๋ฒ์ 2๋ ์ฌ๊ธฐ์ ์์ต๋๋ค : https://sourceware.org/ml/gdb-patches/2017-11/msg00369.html
gdb ํจ์น๋ ํ์ฌ ์์ง๋ง ๊ตฌํํด์ผ ํ ๋ค๋ฅธ vtable ์์ ์ด ๋จ์ ์์ผ๋ฏ๋ก์ด ๋ฌธ์ ๋ ์ด์ด ๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@tromey "vtable ์์ "์ gdb ๋ณ๊ฒฝ์ด ํ์ํฉ๋๊น ์๋๋ฉด rustc ๋ณ๊ฒฝ ๋ง ํ์ํฉ๋๊น?
@tromey "vtable ์์ "์ gdb ๋ณ๊ฒฝ์ด ํ์ํฉ๋๊น ์๋๋ฉด rustc ๋ณ๊ฒฝ ๋ง ํ์ํฉ๋๊น?
์ด์์ ์ผ๋ก๋ ๋ ๋ค ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ rustc ๋นํธ๋ฅผ ์ํํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ข์ ์์์ด ๋ ๊ฒ์ ๋๋ค (์ด์จ๋ ์ด๊ฒ์ด ๋จผ์ ์์ผํฉ๋๋ค). ์ฌ๊ธฐ์ ์์ ์ rustc๊ฐ DWARF์ vtable์ ๋ํ ์ ์ฒด ์ค๋ช ์ ๋ด๋ณด๋ด๋๋กํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ๊ฐ ๊ตฌ์ฑ์์ ์ ํ๊ณผ ์ด๋ฆ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ค๋ ์ฒซ ์ฑ๊ณต :