{"id":1320,"date":"2018-06-03T00:30:39","date_gmt":"2018-06-02T16:30:39","guid":{"rendered":"https:\/\/damogame.cn:15443\/wordpress\/?p=1320"},"modified":"2018-06-03T00:30:39","modified_gmt":"2018-06-02T16:30:39","slug":"gdb-%e5%a6%82%e4%bd%95%e5%b7%a5%e4%bd%9c%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/1320","title":{"rendered":"gdb \u5982\u4f55\u5de5\u4f5c\uff1f"},"content":{"rendered":"<p>\u5927\u5bb6\u597d\uff01\u4eca\u5929\uff0c\u6211\u5f00\u59cb\u8fdb\u884c\u6211\u7684\u00a0<a class=\"ext\" href=\"http:\/\/jvns.ca\/blog\/2016\/06\/12\/a-weird-system-call-process-vm-readv\/\" target=\"_blank\" rel=\"external nofollow noopener\">ruby \u5806\u6808\u8ddf\u8e2a\u9879\u76ee<\/a>\uff0c\u6211\u53d1\u89c9\u6211\u73b0\u5728\u4e86\u89e3\u4e86\u4e00\u4e9b\u5173\u4e8e\u00a0<code>gdb<\/code>\u00a0\u5185\u90e8\u5982\u4f55\u5de5\u4f5c\u7684\u5185\u5bb9\u3002<\/p>\n<p>\u6700\u8fd1\uff0c\u6211\u4f7f\u7528\u00a0<code>gdb<\/code>\u00a0\u6765\u67e5\u770b\u6211\u7684 Ruby \u7a0b\u5e8f\uff0c\u6240\u4ee5\uff0c\u6211\u4eec\u5c06\u5bf9\u4e00\u4e2a Ruby \u7a0b\u5e8f\u8fd0\u884c\u00a0<code>gdb<\/code>\u00a0\u3002\u5b83\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a Ruby \u89e3\u91ca\u5668\u3002\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u6253\u5370\u51fa\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\u7684\u5730\u5740\uff1a<code>ruby_current_thread<\/code>\u3002<\/p>\n<h3 id=\"toc_1\">\u83b7\u53d6\u5168\u5c40\u53d8\u91cf<\/h3>\n<p>\u4e0b\u9762\u5c55\u793a\u4e86\u5982\u4f55\u83b7\u53d6\u5168\u5c40\u53d8\u91cf\u00a0<code>ruby_current_thread<\/code>\u00a0\u7684\u5730\u5740\uff1a<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pln\">$ <\/span><span class=\"kwd\">sudo<\/span> <span class=\"kwd\">gdb<\/span> <span class=\"pun\">-<\/span><span class=\"pln\">p <\/span><span class=\"lit\">2983<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"pun\">(<\/span><span class=\"kwd\">gdb<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> p <\/span><span class=\"pun\">&amp;<\/span><span class=\"pln\"> ruby_current_thread<\/span><\/code><\/li>\n<li class=\"L2\"><code><span class=\"pln\">$2 <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">(<\/span><span class=\"typ\">rb_thread_t<\/span> <span class=\"pun\">**)<\/span> <span class=\"lit\">0x5598a9a8f7f0<\/span> <span class=\"pun\">&lt;<\/span><span class=\"pln\">ruby_current_thread<\/span><span class=\"pun\">&gt;<\/span><\/code><\/li>\n<\/ol>\n<p>\u53d8\u91cf\u80fd\u591f\u4f4d\u4e8e\u7684\u5730\u65b9\u6709<ruby>\u5806<rt>heap<\/rt><\/ruby>\u3001<ruby>\u6808<rt>stack<\/rt><\/ruby>\u6216\u8005\u7a0b\u5e8f\u7684<ruby>\u6587\u672c\u6bb5<rt>text<\/rt><\/ruby>\u3002\u5168\u5c40\u53d8\u91cf\u662f\u7a0b\u5e8f\u7684\u4e00\u90e8\u5206\u3002\u67d0\u79cd\u7a0b\u5ea6\u4e0a\uff0c\u4f60\u53ef\u4ee5\u628a\u5b83\u4eec\u60f3\u8c61\u6210\u662f\u5728\u7f16\u8bd1\u7684\u65f6\u5019\u5206\u914d\u7684\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u5f88\u5bb9\u6613\u7684\u627e\u51fa\u5168\u5c40\u53d8\u91cf\u7684\u5730\u5740\u3002\u8ba9\u6211\u4eec\u6765\u770b\u770b\uff0c<code>gdb<\/code>\u00a0\u662f\u5982\u4f55\u627e\u51fa\u00a0<code>0x5598a9a87f0<\/code>\u00a0\u8fd9\u4e2a\u5730\u5740\u7684\u3002<\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b\u4f4d\u4e8e\u00a0<code>\/proc<\/code>\u00a0\u76ee\u5f55\u4e0b\u4e00\u4e2a\u53eb\u505a\u00a0<code>\/proc\/$pid\/maps<\/code>\u00a0\u7684\u6587\u4ef6\uff0c\u6765\u627e\u5230\u8fd9\u4e2a\u53d8\u91cf\u6240\u4f4d\u4e8e\u7684\u5927\u81f4\u533a\u57df\u3002<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pln\">$ <\/span><span class=\"kwd\">sudo<\/span> <span class=\"kwd\">cat<\/span> <span class=\"pun\">\/<\/span><span class=\"pln\">proc<\/span><span class=\"pun\">\/<\/span><span class=\"lit\">2983<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">maps <\/span><span class=\"pun\">|<\/span> <span class=\"kwd\">grep<\/span><span class=\"pln\"> bin<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">ruby<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"lit\">5598a9605000<\/span><span class=\"pun\">-<\/span><span class=\"lit\">5598a9886000<\/span><span class=\"pln\"> r<\/span><span class=\"pun\">-<\/span><span class=\"pln\">xp <\/span><span class=\"lit\">00000000<\/span> <span class=\"lit\">00<\/span><span class=\"pun\">:<\/span><span class=\"lit\">32<\/span> <span class=\"lit\">323508<\/span>                     <span class=\"pun\">\/<\/span><span class=\"pln\">home<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">bork<\/span><span class=\"pun\">\/.<\/span><span class=\"pln\">rbenv<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">versions<\/span><span class=\"pun\">\/<\/span><span class=\"lit\">2.1<\/span><span class=\"pun\">.<\/span><span class=\"lit\">6<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">bin<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">ruby<\/span><\/code><\/li>\n<li class=\"L2\"><code><span class=\"lit\">5598a9a86000<\/span><span class=\"pun\">-<\/span><span class=\"lit\">5598a9a8b000<\/span><span class=\"pln\"> r<\/span><span class=\"pun\">--<\/span><span class=\"pln\">p <\/span><span class=\"lit\">00281000<\/span> <span class=\"lit\">00<\/span><span class=\"pun\">:<\/span><span class=\"lit\">32<\/span> <span class=\"lit\">323508<\/span>                     <span class=\"pun\">\/<\/span><span class=\"pln\">home<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">bork<\/span><span class=\"pun\">\/.<\/span><span class=\"pln\">rbenv<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">versions<\/span><span class=\"pun\">\/<\/span><span class=\"lit\">2.1<\/span><span class=\"pun\">.<\/span><span class=\"lit\">6<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">bin<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">ruby<\/span><\/code><\/li>\n<li class=\"L3\"><code><span class=\"lit\">5598a9a8b000<\/span><span class=\"pun\">-<\/span><span class=\"lit\">5598a9a8d000<\/span><span class=\"pln\"> rw<\/span><span class=\"pun\">-<\/span><span class=\"pln\">p <\/span><span class=\"lit\">00286000<\/span> <span class=\"lit\">00<\/span><span class=\"pun\">:<\/span><span class=\"lit\">32<\/span> <span class=\"lit\">323508<\/span>                     <span class=\"pun\">\/<\/span><span class=\"pln\">home<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">bork<\/span><span class=\"pun\">\/.<\/span><span class=\"pln\">rbenv<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">versions<\/span><span class=\"pun\">\/<\/span><span class=\"lit\">2.1<\/span><span class=\"pun\">.<\/span><span class=\"lit\">6<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">bin<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">ruby<\/span><\/code><\/li>\n<li class=\"L4\"><code><\/code><\/li>\n<\/ol>\n<p>\u6240\u4ee5\uff0c\u6211\u4eec\u770b\u5230\uff0c\u8d77\u59cb\u5730\u5740\u00a0<code>5598a9605000<\/code>\u00a0\u548c\u00a0<code>0x5598a9a8f7f0<\/code>\u00a0\u5f88\u50cf\uff0c\u4f46\u5e76\u4e0d\u4e00\u6837\u3002\u54ea\u91cc\u4e0d\u4e00\u6837\u5462\uff0c\u6211\u4eec\u628a\u4e24\u4e2a\u6570\u76f8\u51cf\uff0c\u770b\u770b\u7ed3\u679c\u662f\u591a\u5c11\uff1a<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pun\">(<\/span><span class=\"kwd\">gdb<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> p<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">x <\/span><span class=\"lit\">0x5598a9a8f7f0<\/span> <span class=\"pun\">-<\/span> <span class=\"lit\">0x5598a9605000<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"pln\">$4 <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0x48a7f0<\/span><\/code><\/li>\n<li class=\"L2\"><code><\/code><\/li>\n<\/ol>\n<p>\u4f60\u53ef\u80fd\u4f1a\u95ee\uff0c\u8fd9\u4e2a\u6570\u662f\u4ec0\u4e48\uff1f\u8ba9\u6211\u4eec\u4f7f\u7528\u00a0<code>nm<\/code>\u00a0\u6765\u67e5\u770b\u4e00\u4e0b\u7a0b\u5e8f\u7684\u7b26\u53f7\u8868\u3002<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"kwd\">sudo<\/span> <span class=\"kwd\">nm<\/span> <span class=\"pun\">\/<\/span><span class=\"pln\">proc<\/span><span class=\"pun\">\/<\/span><span class=\"lit\">2983<\/span><span class=\"pun\">\/<\/span><span class=\"pln\">exe <\/span><span class=\"pun\">|<\/span> <span class=\"kwd\">grep<\/span><span class=\"pln\"> ruby_current_thread<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"lit\">000000000048a7f0<\/span><span class=\"pln\"> b ruby_current_thread<\/span><\/code><\/li>\n<\/ol>\n<p>\u6211\u4eec\u770b\u5230\u4e86\u4ec0\u4e48\uff1f\u80fd\u591f\u770b\u5230\u00a0<code>0x48a7f0<\/code>\u00a0\u5417\uff1f\u662f\u7684\uff0c\u6ca1\u9519\u3002\u6240\u4ee5\uff0c\u5982\u679c\u6211\u4eec\u60f3\u627e\u5230\u7a0b\u5e8f\u4e2d\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\u7684\u5730\u5740\uff0c\u90a3\u4e48\u53ea\u9700\u5728\u7b26\u53f7\u8868\u4e2d\u67e5\u627e\u53d8\u91cf\u7684\u540d\u5b57\uff0c\u7136\u540e\u518d\u52a0\u4e0a\u5728\u00a0<code>\/proc\/whatever\/maps<\/code>\u00a0\u4e2d\u7684\u8d77\u59cb\u5730\u5740\uff0c\u5c31\u5f97\u5230\u4e86\u3002<\/p>\n<p>\u6240\u4ee5\u73b0\u5728\uff0c\u6211\u4eec\u77e5\u9053\u00a0<code>gdb<\/code>\u00a0\u505a\u4e86\u4ec0\u4e48\u3002\u4f46\u662f\uff0c<code>gdb<\/code>\u00a0\u5b9e\u9645\u505a\u7684\u4e8b\u60c5\u66f4\u591a\uff0c\u8ba9\u6211\u4eec\u8df3\u8fc7\u76f4\u63a5\u8f6c\u5230\u2026<\/p>\n<h3 id=\"toc_2\">\u89e3\u5f15\u7528\u6307\u9488<\/h3>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pun\">(<\/span><span class=\"kwd\">gdb<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> p ruby_current_thread<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"pln\">$1 <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">(<\/span><span class=\"typ\">rb_thread_t<\/span> <span class=\"pun\">*)<\/span> <span class=\"lit\">0x5598ab3235b0<\/span><\/code><\/li>\n<\/ol>\n<p>\u6211\u4eec\u8981\u505a\u7684\u4e0b\u4e00\u4ef6\u4e8b\u5c31\u662f\u89e3\u5f15\u7528\u00a0<code>ruby_current_thread<\/code>\u00a0\u8fd9\u4e00\u6307\u9488\u3002\u6211\u4eec\u60f3\u770b\u4e00\u4e0b\u5b83\u6240\u6307\u5411\u7684\u5730\u5740\u3002\u4e3a\u4e86\u5b8c\u6210\u8fd9\u4ef6\u4e8b\uff0c<code>gdb<\/code>\u00a0\u4f1a\u8fd0\u884c\u5927\u91cf\u7cfb\u7edf\u8c03\u7528\u6bd4\u5982\uff1a<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pln\">ptrace<\/span><span class=\"pun\">(<\/span><span class=\"pln\">PTRACE_PEEKTEXT<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2983<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">0x5598a9a8f7f0<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">0x5598ab3235b0<\/span><span class=\"pun\">])<\/span> <span class=\"pun\">=<\/span> <span class=\"lit\">0<\/span><\/code><\/li>\n<li class=\"L1\"><code><\/code><\/li>\n<\/ol>\n<p>\u4f60\u662f\u5426\u8fd8\u8bb0\u5f97\u00a0<code>0x5598a9a8f7f0<\/code>\u00a0\u8fd9\u4e2a\u5730\u5740\uff1f<code>gdb<\/code>\u00a0\u4f1a\u95ee\uff1a\u201c\u563f\uff0c\u5728\u8fd9\u4e2a\u5730\u5740\u4e2d\u7684\u5b9e\u9645\u5185\u5bb9\u662f\u4ec0\u4e48\uff1f\u201d\u3002<code>2983<\/code>\u662f\u6211\u4eec\u8fd0\u884c gdb \u8fd9\u4e2a\u8fdb\u7a0b\u7684 ID\u3002gdb \u4f7f\u7528\u00a0<code>ptrace<\/code>\u00a0\u8fd9\u4e00\u7cfb\u7edf\u8c03\u7528\u6765\u5b8c\u6210\u8fd9\u4e00\u4ef6\u4e8b\u3002<\/p>\n<p>\u597d\u6781\u4e86\uff01\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u89e3\u5f15\u7528\u5185\u5b58\u5e76\u627e\u51fa\u5185\u5b58\u5730\u5740\u4e2d\u5b58\u50a8\u7684\u5185\u5bb9\u3002\u6709\u4e00\u4e9b\u6709\u7528\u7684\u00a0<code>gdb<\/code>\u00a0\u547d\u4ee4\uff0c\u6bd4\u5982\u00a0<code>x\/40w \u53d8\u91cf<\/code>\u00a0\u548c\u00a0<code>x\/40b \u53d8\u91cf<\/code>\u00a0\u5206\u522b\u4f1a\u663e\u793a\u7ed9\u5b9a\u5730\u5740\u7684 40 \u4e2a\u5b57\/\u5b57\u8282\u3002<\/p>\n<h3 id=\"toc_3\">\u63cf\u8ff0\u7ed3\u6784<\/h3>\n<p>\u4e00\u4e2a\u5185\u5b58\u5730\u5740\u4e2d\u7684\u5185\u5bb9\u53ef\u80fd\u770b\u8d77\u6765\u50cf\u4e0b\u9762\u8fd9\u6837\u3002\u53ef\u4ee5\u770b\u5230\u5f88\u591a\u5b57\u8282\uff01<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pun\">(<\/span><span class=\"kwd\">gdb<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> x<\/span><span class=\"pun\">\/<\/span><span class=\"lit\">40b<\/span><span class=\"pln\"> ruby_current_thread<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"lit\">0x5598ab3235b0<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">16<\/span>  <span class=\"pun\">-<\/span><span class=\"lit\">90<\/span> <span class=\"lit\">55<\/span>  <span class=\"pun\">-<\/span><span class=\"lit\">85<\/span> <span class=\"pun\">-<\/span><span class=\"lit\">104<\/span>    <span class=\"lit\">85<\/span>  <span class=\"lit\">0<\/span>   <span class=\"lit\">0<\/span><\/code><\/li>\n<li class=\"L2\"><code><span class=\"lit\">0x5598ab3235b8<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">32<\/span>  <span class=\"lit\">47<\/span>  <span class=\"lit\">50<\/span>  <span class=\"pun\">-<\/span><span class=\"lit\">85<\/span> <span class=\"pun\">-<\/span><span class=\"lit\">104<\/span>    <span class=\"lit\">85<\/span>  <span class=\"lit\">0<\/span>   <span class=\"lit\">0<\/span><\/code><\/li>\n<li class=\"L3\"><code><span class=\"lit\">0x5598ab3235c0<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">16<\/span>  <span class=\"pun\">-<\/span><span class=\"lit\">64<\/span> <span class=\"pun\">-<\/span><span class=\"lit\">55<\/span> <span class=\"lit\">115<\/span> <span class=\"pun\">-<\/span><span class=\"lit\">97<\/span> <span class=\"lit\">127<\/span> <span class=\"lit\">0<\/span>   <span class=\"lit\">0<\/span><\/code><\/li>\n<li class=\"L4\"><code><span class=\"lit\">0x5598ab3235c8<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">0<\/span>   <span class=\"lit\">0<\/span>   <span class=\"lit\">2<\/span>   <span class=\"lit\">0<\/span>   <span class=\"lit\">0<\/span>   <span class=\"lit\">0<\/span>   <span class=\"lit\">0<\/span>   <span class=\"lit\">0<\/span><\/code><\/li>\n<li class=\"L5\"><code><span class=\"lit\">0x5598ab3235d0<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">-<\/span><span class=\"lit\">96<\/span> <span class=\"pun\">-<\/span><span class=\"lit\">83<\/span> <span class=\"pun\">-<\/span><span class=\"lit\">39<\/span> <span class=\"lit\">115<\/span> <span class=\"pun\">-<\/span><span class=\"lit\">97<\/span> <span class=\"lit\">127<\/span> <span class=\"lit\">0<\/span>   <span class=\"lit\">0<\/span><\/code><\/li>\n<\/ol>\n<p>\u8fd9\u5f88\u6709\u7528\uff0c\u4f46\u4e5f\u4e0d\u662f\u975e\u5e38\u6709\u7528\uff01\u5982\u679c\u4f60\u662f\u4e00\u4e2a\u50cf\u6211\u4e00\u6837\u7684\u4eba\u7c7b\u5e76\u4e14\u60f3\u77e5\u9053\u5b83\u4ee3\u8868\u4ec0\u4e48\uff0c\u90a3\u4e48\u4f60\u9700\u8981\u66f4\u591a\u5185\u5bb9\uff0c\u6bd4\u5982\u50cf\u8fd9\u6837\uff1a<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pun\">(<\/span><span class=\"kwd\">gdb<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> p <\/span><span class=\"pun\">*(<\/span><span class=\"pln\">ruby_current_thread<\/span><span class=\"pun\">)<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"pln\">$8 <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">{<\/span><span class=\"kwd\">self<\/span> <span class=\"pun\">=<\/span> <span class=\"lit\">94114195940880<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> vm <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0x5598ab322f20<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> stack <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0x7f9f73c9c010<\/span><span class=\"pun\">,<\/span><\/code><\/li>\n<li class=\"L2\"><code><span class=\"pln\">    stack_size <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">131072<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cfp <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0x7f9f73d9ada0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> safe_level <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\">    raised_flag <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><\/code><\/li>\n<li class=\"L3\"><code><span class=\"pln\">    last_status <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">8<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> state <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> waiting_fd <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">-<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> passed_block <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0x0<\/span><span class=\"pun\">,<\/span><\/code><\/li>\n<li class=\"L4\"><code><span class=\"pln\">    passed_bmethod_me <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0x0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> passed_ci <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0x0<\/span><span class=\"pun\">,<\/span><span class=\"pln\">    top_self <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">94114195612680<\/span><span class=\"pun\">,<\/span><\/code><\/li>\n<li class=\"L5\"><code><span class=\"pln\">    top_wrapper <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> base_block <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0x0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> root_lep <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">0x0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> root_svar <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">8<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> thread_id <\/span><span class=\"pun\">=<\/span><\/code><\/li>\n<li class=\"L6\"><code>    <span class=\"lit\">140322820187904<\/span><span class=\"pun\">,<\/span><\/code><\/li>\n<\/ol>\n<p>\u592a\u597d\u4e86\u3002\u73b0\u5728\u5c31\u66f4\u52a0\u6709\u7528\u4e86\u3002<code>gdb<\/code>\u00a0\u662f\u5982\u4f55\u77e5\u9053\u8fd9\u4e9b\u6240\u6709\u57df\u7684\uff0c\u6bd4\u5982\u00a0<code>stack_size<\/code>\u00a0\uff1f\u662f\u4ece\u00a0<code>DWARF<\/code>\u00a0\u5f97\u77e5\u7684\u3002<code>DWARF<\/code>\u00a0\u662f\u5b58\u50a8\u989d\u5916\u7a0b\u5e8f\u8c03\u8bd5\u6570\u636e\u7684\u4e00\u79cd\u65b9\u5f0f\uff0c\u4ece\u800c\u50cf\u00a0<code>gdb<\/code>\u00a0\u8fd9\u6837\u7684\u8c03\u8bd5\u5668\u80fd\u591f\u5de5\u4f5c\u7684\u66f4\u597d\u3002\u5b83\u901a\u5e38\u5b58\u50a8\u4e3a\u4e8c\u8fdb\u5236\u7684\u4e00\u90e8\u5206\u3002\u5982\u679c\u6211\u5bf9\u6211\u7684 Ruby \u4e8c\u8fdb\u5236\u6587\u4ef6\u8fd0\u884c\u00a0<code>dwarfdump<\/code>\u00a0\u547d\u4ee4\uff0c\u90a3\u4e48\u6211\u5c06\u4f1a\u5f97\u5230\u4e0b\u9762\u7684\u8f93\u51fa\uff1a<\/p>\n<p>\uff08\u6211\u5df2\u7ecf\u91cd\u65b0\u7f16\u6392\u4f7f\u5f97\u5b83\u66f4\u5bb9\u6613\u7406\u89e3\uff09<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pln\">DW_AT_name                  <\/span><span class=\"str\">\"rb_thread_struct\"<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"pln\">DW_AT_byte_size             <\/span><span class=\"lit\">0x000003e8<\/span><\/code><\/li>\n<li class=\"L2\"><code><span class=\"pln\">DW_TAG_member<\/span><\/code><\/li>\n<li class=\"L3\"><code><span class=\"pln\">  DW_AT_name                  <\/span><span class=\"str\">\"self\"<\/span><\/code><\/li>\n<li class=\"L4\"><code><span class=\"pln\">  DW_AT_type                  <\/span><span class=\"pun\">&lt;<\/span><span class=\"lit\">0x00000579<\/span><span class=\"pun\">&gt;<\/span><\/code><\/li>\n<li class=\"L5\"><code><span class=\"pln\">  DW_AT_data_member_location  DW_OP_plus_uconst <\/span><span class=\"lit\">0<\/span><\/code><\/li>\n<li class=\"L6\"><code><span class=\"pln\">DW_TAG_member<\/span><\/code><\/li>\n<li class=\"L7\"><code><span class=\"pln\">  DW_AT_name                  <\/span><span class=\"str\">\"vm\"<\/span><\/code><\/li>\n<li class=\"L8\"><code><span class=\"pln\">  DW_AT_type                  <\/span><span class=\"pun\">&lt;<\/span><span class=\"lit\">0x0000270c<\/span><span class=\"pun\">&gt;<\/span><\/code><\/li>\n<li class=\"L9\"><code><span class=\"pln\">  DW_AT_data_member_location  DW_OP_plus_uconst <\/span><span class=\"lit\">8<\/span><\/code><\/li>\n<li class=\"L0\"><code><span class=\"pln\">DW_TAG_member<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"pln\">  DW_AT_name                  <\/span><span class=\"str\">\"stack\"<\/span><\/code><\/li>\n<li class=\"L2\"><code><span class=\"pln\">  DW_AT_type                  <\/span><span class=\"pun\">&lt;<\/span><span class=\"lit\">0x000006b3<\/span><span class=\"pun\">&gt;<\/span><\/code><\/li>\n<li class=\"L3\"><code><span class=\"pln\">  DW_AT_data_member_location  DW_OP_plus_uconst <\/span><span class=\"lit\">16<\/span><\/code><\/li>\n<li class=\"L4\"><code><span class=\"pln\">DW_TAG_member<\/span><\/code><\/li>\n<li class=\"L5\"><code><span class=\"pln\">  DW_AT_name                  <\/span><span class=\"str\">\"stack_size\"<\/span><\/code><\/li>\n<li class=\"L6\"><code><span class=\"pln\">  DW_AT_type                  <\/span><span class=\"pun\">&lt;<\/span><span class=\"lit\">0x00000031<\/span><span class=\"pun\">&gt;<\/span><\/code><\/li>\n<li class=\"L7\"><code><span class=\"pln\">  DW_AT_data_member_location  DW_OP_plus_uconst <\/span><span class=\"lit\">24<\/span><\/code><\/li>\n<li class=\"L8\"><code><span class=\"pln\">DW_TAG_member<\/span><\/code><\/li>\n<li class=\"L9\"><code><span class=\"pln\">  DW_AT_name                  <\/span><span class=\"str\">\"cfp\"<\/span><\/code><\/li>\n<li class=\"L0\"><code><span class=\"pln\">  DW_AT_type                  <\/span><span class=\"pun\">&lt;<\/span><span class=\"lit\">0x00002712<\/span><span class=\"pun\">&gt;<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"pln\">  DW_AT_data_member_location  DW_OP_plus_uconst <\/span><span class=\"lit\">32<\/span><\/code><\/li>\n<li class=\"L2\"><code><span class=\"pln\">DW_TAG_member<\/span><\/code><\/li>\n<li class=\"L3\"><code><span class=\"pln\">  DW_AT_name                  <\/span><span class=\"str\">\"safe_level\"<\/span><\/code><\/li>\n<li class=\"L4\"><code><span class=\"pln\">  DW_AT_type                  <\/span><span class=\"pun\">&lt;<\/span><span class=\"lit\">0x00000066<\/span><span class=\"pun\">&gt;<\/span><\/code><\/li>\n<li class=\"L5\"><code><\/code><\/li>\n<\/ol>\n<p>\u6240\u4ee5\uff0c<code>ruby_current_thread<\/code>\u00a0\u7684\u7c7b\u578b\u540d\u4e3a\u00a0<code>rb_thread_struct<\/code>\uff0c\u5b83\u7684\u5927\u5c0f\u4e3a\u00a0<code>0x3e8<\/code>\u00a0\uff08\u5373 1000 \u5b57\u8282\uff09\uff0c\u5b83\u6709\u8bb8\u591a\u6210\u5458\u9879\uff0c<code>stack_size<\/code>\u00a0\u662f\u5176\u4e2d\u4e4b\u4e00\uff0c\u5728\u504f\u79fb\u4e3a\u00a0<code>24<\/code>\u00a0\u7684\u5730\u65b9\uff0c\u5b83\u6709\u7c7b\u578b\u00a0<code>31<\/code>\u00a0\u3002<code>31<\/code>\u00a0\u662f\u4ec0\u4e48\uff1f\u4e0d\u7528\u62c5\u5fc3\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5728 DWARF \u4fe1\u606f\u4e2d\u67e5\u770b\u3002<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pln\">&lt; 1&gt;&lt;0x00000031&gt;    DW_TAG_typedef<\/span><\/code><\/li>\n<li class=\"L1\"><code><span class=\"pln\">                      DW_AT_name                  \"size_t\"<\/span><\/code><\/li>\n<li class=\"L2\"><code><span class=\"pln\">                      DW_AT_type                  &lt;0x0000003c&gt;<\/span><\/code><\/li>\n<li class=\"L3\"><code><span class=\"pln\">&lt; 1&gt;&lt;0x0000003c&gt;    DW_TAG_base_type<\/span><\/code><\/li>\n<li class=\"L4\"><code><span class=\"pln\">                      DW_AT_byte_size             0x00000008<\/span><\/code><\/li>\n<li class=\"L5\"><code><span class=\"pln\">                      DW_AT_encoding              DW_ATE_unsigned<\/span><\/code><\/li>\n<li class=\"L6\"><code><span class=\"pln\">                      DW_AT_name                  \"long unsigned int\"<\/span><\/code><\/li>\n<li class=\"L7\"><code><\/code><\/li>\n<\/ol>\n<p>\u6240\u4ee5\uff0c<code>stack_size<\/code>\u00a0\u5177\u6709\u7c7b\u578b\u00a0<code>size_t<\/code>\uff0c\u5373\u00a0<code>long unsigned int<\/code>\uff0c\u5b83\u662f 8 \u5b57\u8282\u7684\u3002\u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u4ee5\u67e5\u770b\u8be5\u6808\u7684\u5927\u5c0f\u3002<\/p>\n<p>\u5982\u679c\u6211\u4eec\u6709\u4e86 DWARF \u8c03\u8bd5\u6570\u636e\uff0c\u8be5\u5982\u4f55\u5206\u89e3\uff1a<\/p>\n<ol>\n<li>\u67e5\u770b\u00a0<code>ruby_current_thread<\/code>\u00a0\u6240\u6307\u5411\u7684\u5185\u5b58\u533a\u57df<\/li>\n<li>\u52a0\u4e0a\u00a0<code>24<\/code>\u00a0\u5b57\u8282\u6765\u5f97\u5230\u00a0<code>stack_size<\/code><\/li>\n<li>\u8bfb 8 \u5b57\u8282\uff08\u4ee5\u5c0f\u7aef\u7684\u683c\u5f0f\uff0c\u56e0\u4e3a\u662f\u5728 x86 \u4e0a\uff09<\/li>\n<li>\u5f97\u5230\u7b54\u6848\uff01<\/li>\n<\/ol>\n<p>\u5728\u4e0a\u9762\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\u662f\u00a0<code>131072<\/code>\uff08\u5373 128 kb\uff09\u3002<\/p>\n<p>\u5bf9\u6211\u6765\u8bf4\uff0c\u8fd9\u4f7f\u5f97\u8c03\u8bd5\u4fe1\u606f\u7684\u7528\u9014\u66f4\u52a0\u660e\u663e\u3002\u5982\u679c\u6211\u4eec\u4e0d\u77e5\u9053\u8fd9\u4e9b\u6240\u6709\u53d8\u91cf\u6240\u8868\u793a\u7684\u989d\u5916\u7684\u5143\u6570\u636e\uff0c\u90a3\u4e48\u6211\u4eec\u65e0\u6cd5\u77e5\u9053\u5b58\u50a8\u5728\u00a0<code>0x5598ab325b0<\/code>\u00a0\u8fd9\u4e00\u5730\u5740\u7684\u5b57\u8282\u662f\u4ec0\u4e48\u3002<\/p>\n<p>\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u4f60\u53ef\u4ee5\u4e3a\u4f60\u7684\u7a0b\u5e8f\u5355\u72ec\u5b89\u88c5\u7a0b\u5e8f\u7684\u8c03\u8bd5\u4fe1\u606f\uff0c\u56e0\u4e3a\u00a0<code>gdb<\/code>\u00a0\u5e76\u4e0d\u5173\u5fc3\u4ece\u4f55\u5904\u83b7\u53d6\u8fd9\u4e9b\u989d\u5916\u7684\u8c03\u8bd5\u4fe1\u606f\u3002<\/p>\n<h3 id=\"toc_4\">DWARF \u4ee4\u4eba\u8ff7\u60d1<\/h3>\n<p>\u6211\u6700\u8fd1\u9605\u8bfb\u4e86\u5927\u91cf\u7684 DWARF \u77e5\u8bc6\u3002\u73b0\u5728\uff0c\u6211\u4f7f\u7528 libdwarf\uff0c\u4f7f\u7528\u4f53\u9a8c\u4e0d\u662f\u5f88\u597d\uff0c\u8fd9\u4e2a API \u4ee4\u4eba\u8ff7\u60d1\uff0c\u4f60\u5c06\u4ee5\u4e00\u79cd\u5947\u602a\u7684\u65b9\u5f0f\u521d\u59cb\u5316\u6240\u6709\u4e1c\u897f\uff0c\u5b83\u771f\u7684\u5f88\u6162\uff08\u9700\u8981\u82b1\u8d39 0.3 \u79d2\u7684\u65f6\u95f4\u6765\u8bfb\u53d6\u6211\u7684 Ruby \u7a0b\u5e8f\u7684\u6240\u6709\u8c03\u8bd5\u4fe1\u606f\uff0c\u8fd9\u771f\u662f\u53ef\u7b11\uff09\u3002\u6709\u4eba\u544a\u8bc9\u6211\uff0c\u6765\u81ea elfutils \u7684 libdw \u8981\u597d\u4e00\u4e9b\u3002<\/p>\n<p>\u540c\u6837\uff0c\u518d\u63d0\u53ca\u4e00\u70b9\uff0c\u4f60\u53ef\u4ee5\u67e5\u770b\u00a0<code>DW_AT_data_member_location<\/code>\u00a0\u6765\u67e5\u770b\u7ed3\u6784\u6210\u5458\u7684\u504f\u79fb\u3002\u6211\u5728 Stack Overflow \u4e0a\u67e5\u627e\u5982\u4f55\u5b8c\u6210\u8fd9\u4ef6\u4e8b\uff0c\u5e76\u4e14\u5f97\u5230<a class=\"ext\" href=\"https:\/\/stackoverflow.com\/questions\/25047329\/how-to-get-struct-member-offset-from-dwarf-info\" target=\"_blank\" rel=\"external nofollow noopener\">\u8fd9\u4e2a\u7b54\u6848<\/a>\u3002\u57fa\u672c\u4e0a\uff0c\u4ee5\u4e0b\u9762\u8fd9\u6837\u4e00\u4e2a\u68c0\u67e5\u5f00\u59cb\uff1a<\/p>\n<ol class=\"linenums\">\n<li class=\"L0\"><code><span class=\"pln\">dwarf_whatform<\/span><span class=\"pun\">(<\/span><span class=\"pln\">attrs<\/span><span class=\"pun\">[<\/span><span class=\"pln\">i<\/span><span class=\"pun\">],<\/span> <span class=\"pun\">&amp;<\/span><span class=\"pln\">form<\/span><span class=\"pun\">,<\/span> <span class=\"pun\">&amp;<\/span><span class=\"pln\">error<\/span><span class=\"pun\">);<\/span><\/code><\/li>\n<li class=\"L1\"><code>    <span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">form <\/span><span class=\"pun\">==<\/span><span class=\"pln\"> DW_FORM_data1 <\/span><span class=\"pun\">||<\/span><span class=\"pln\"> form <\/span><span class=\"pun\">==<\/span><span class=\"pln\"> DW_FORM_data2<\/span><\/code><\/li>\n<li class=\"L2\"><code><span class=\"pln\">        form <\/span><span class=\"pun\">==<\/span><span class=\"pln\"> DW_FORM_data2 <\/span><span class=\"pun\">||<\/span><span class=\"pln\"> form <\/span><span class=\"pun\">==<\/span><span class=\"pln\"> DW_FORM_data4<\/span><\/code><\/li>\n<li class=\"L3\"><code><span class=\"pln\">        form <\/span><span class=\"pun\">==<\/span><span class=\"pln\"> DW_FORM_data8 <\/span><span class=\"pun\">||<\/span><span class=\"pln\"> form <\/span><span class=\"pun\">==<\/span><span class=\"pln\"> DW_FORM_udata<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><\/code><\/li>\n<\/ol>\n<p>\u7ee7\u7eed\u5f80\u524d\u3002\u4e3a\u4ec0\u4e48\u4f1a\u6709 800 \u4e07\u79cd\u4e0d\u540c\u7684\u00a0<code>DW_FORM_data<\/code>\u00a0\u9700\u8981\u68c0\u67e5\uff1f\u53d1\u751f\u4e86\u4ec0\u4e48\uff1f\u6211\u6ca1\u6709\u5934\u7eea\u3002<\/p>\n<p>\u4e0d\u7ba1\u600e\u4e48\u8bf4\uff0c\u6211\u7684\u5370\u8c61\u662f\uff0cDWARF \u662f\u4e00\u4e2a\u5e9e\u5927\u800c\u590d\u6742\u7684\u6807\u51c6\uff08\u53ef\u80fd\u662f\u4eba\u4eec\u7528\u6765\u751f\u6210 DWARF \u7684\u5e93\u7a0d\u5fae\u4e0d\u517c\u5bb9\uff09\uff0c\u4f46\u662f\u6211\u4eec\u6709\u7684\u5c31\u662f\u8fd9\u4e9b\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u7528\u5b83\u6765\u5de5\u4f5c\u3002<\/p>\n<p>\u6211\u80fd\u591f\u7f16\u5199\u4ee3\u7801\u5e76\u67e5\u770b DWARF \uff0c\u8fd9\u5c31\u5f88\u9177\u4e86\uff0c\u5e76\u4e14\u6211\u7684\u4ee3\u7801\u5b9e\u9645\u4e0a\u5927\u591a\u6570\u80fd\u591f\u5de5\u4f5c\u3002\u9664\u4e86\u7a0b\u5e8f\u5d29\u6e83\u7684\u65f6\u5019\u3002\u6211\u5c31\u662f\u8fd9\u6837\u5de5\u4f5c\u7684\u3002<\/p>\n<h3 id=\"toc_5\">\u5c55\u5f00\u6808\u8def\u5f84<\/h3>\n<p>\u5728\u8fd9\u7bc7\u6587\u7ae0\u7684\u65e9\u671f\u7248\u672c\u4e2d\uff0c\u6211\u8bf4\u8fc7\uff0c<code>gdb<\/code>\u00a0\u4f7f\u7528 libunwind \u6765\u5c55\u5f00\u6808\u8def\u5f84\uff0c\u8fd9\u6837\u8bf4\u5e76\u4e0d\u603b\u662f\u5bf9\u7684\u3002<\/p>\n<p>\u6709\u4e00\u4f4d\u5bf9\u00a0<code>gdb<\/code>\u00a0\u6709\u6df1\u5165\u7814\u7a76\u7684\u4eba\u53d1\u4e86\u5927\u91cf\u90ae\u4ef6\u544a\u8bc9\u6211\uff0c\u4e3a\u4e86\u80fd\u591f\u505a\u5f97\u6bd4 libunwind \u66f4\u597d\uff0c\u4ed6\u4eec\u82b1\u8d39\u4e86\u5927\u91cf\u65f6\u95f4\u6765\u5c1d\u8bd5\u5982\u4f55\u5c55\u5f00\u6808\u8def\u5f84\u3002\u8fd9\u610f\u5473\u7740\uff0c\u5982\u679c\u4f60\u5728\u7a0b\u5e8f\u7684\u4e00\u4e2a\u5947\u602a\u7684\u4e2d\u95f4\u4f4d\u7f6e\u505c\u4e0b\u6765\u4e86\uff0c\u4f60\u6240\u80fd\u591f\u83b7\u53d6\u7684\u8c03\u8bd5\u4fe1\u606f\u53c8\u5f88\u5c11\uff0c\u90a3\u4e48\u4f60\u53ef\u4ee5\u5bf9\u6808\u505a\u4e00\u4e9b\u5947\u602a\u7684\u4e8b\u60c5\uff0c<code>gdb<\/code>\u00a0\u4f1a\u5c1d\u8bd5\u627e\u51fa\u4f60\u4f4d\u4e8e\u4f55\u5904\u3002<\/p>\n<h3 id=\"toc_6\">gdb \u80fd\u505a\u7684\u5176\u4ed6\u4e8b<\/h3>\n<p>\u6211\u5728\u8fd9\u513f\u6240\u63cf\u8ff0\u7684\u4e00\u4e9b\u4e8b\u8bf7\uff08\u67e5\u770b\u5185\u5b58\uff0c\u7406\u89e3 DWARF \u6240\u5c55\u793a\u7684\u7ed3\u6784\uff09\u5e76\u4e0d\u662f\u00a0<code>gdb<\/code>\u00a0\u80fd\u591f\u505a\u7684\u5168\u90e8\u4e8b\u60c5\u3002\u9605\u8bfb Brendan Gregg \u7684<a class=\"ext\" href=\"http:\/\/www.brendangregg.com\/blog\/2016-08-09\/gdb-example-ncurses.html\" target=\"_blank\" rel=\"external nofollow noopener\">\u6614\u65e5 gdb \u4f8b\u5b50<\/a>\uff0c\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\uff0c<code>gdb<\/code>\u00a0\u4e5f\u80fd\u591f\u5b8c\u6210\u4e0b\u9762\u8fd9\u4e9b\u4e8b\u60c5\uff1a<\/p>\n<ul>\n<li>\u53cd\u6c47\u7f16<\/li>\n<li>\u67e5\u770b\u5bc4\u5b58\u5668\u5185\u5bb9<\/li>\n<\/ul>\n<p>\u5728\u64cd\u4f5c\u7a0b\u5e8f\u65b9\u9762\uff0c\u5b83\u53ef\u4ee5\uff1a<\/p>\n<ul>\n<li>\u8bbe\u7f6e\u65ad\u70b9\uff0c\u5355\u6b65\u8fd0\u884c\u7a0b\u5e8f<\/li>\n<li>\u4fee\u6539\u5185\u5b58\uff08\u8fd9\u662f\u4e00\u4e2a\u5371\u9669\u884c\u4e3a\uff09<\/li>\n<\/ul>\n<p>\u4e86\u89e3\u00a0<code>gdb<\/code>\u00a0\u5982\u4f55\u5de5\u4f5c\u4f7f\u5f97\u5f53\u6211\u4f7f\u7528\u5b83\u7684\u65f6\u5019\u66f4\u52a0\u81ea\u4fe1\u3002\u6211\u8fc7\u53bb\u7ecf\u5e38\u611f\u5230\u8ff7\u60d1\uff0c\u56e0\u4e3a\u00a0<code>gdb<\/code>\u00a0\u6709\u70b9\u50cf C\uff0c\u5f53\u4f60\u8f93\u5165\u00a0<code>ruby_current_thread-&gt;cfp-&gt;iseq<\/code>\uff0c\u5c31\u597d\u50cf\u662f\u5728\u5199 C \u4ee3\u7801\u3002\u4f46\u662f\u4f60\u5e76\u4e0d\u662f\u5728\u5199 C \u4ee3\u7801\u3002\u6211\u5f88\u5bb9\u6613\u9047\u5230\u00a0<code>gdb<\/code>\u00a0\u7684\u9650\u5236\uff0c\u4e0d\u77e5\u9053\u4e3a\u4ec0\u4e48\u3002<\/p>\n<p>\u77e5\u9053\u4f7f\u7528 DWARF \u6765\u627e\u51fa\u7ed3\u6784\u5185\u5bb9\u7ed9\u4e86\u6211\u4e00\u4e2a\u66f4\u597d\u7684\u5fc3\u667a\u6a21\u578b\u548c\u66f4\u52a0\u6b63\u786e\u7684\u671f\u671b\uff01\u8fd9\u771f\u662f\u6781\u597d\u7684\uff01<\/p>\n<hr \/>\n<p>via:\u00a0<a class=\"ext\" href=\"https:\/\/jvns.ca\/blog\/2016\/08\/10\/how-does-gdb-work\/\" target=\"_blank\" rel=\"external nofollow noopener\">https:\/\/jvns.ca\/blog\/2016\/08\/10\/how-does-gdb-work\/<\/a><\/p>\n<p>\u4f5c\u8005\uff1a<a class=\"ext\" href=\"https:\/\/jvns.ca\/\" target=\"_blank\" rel=\"external nofollow noopener\">Julia Evans<\/a>\u00a0\u8bd1\u8005\uff1a<a class=\"ext\" href=\"https:\/\/github.com\/ucasFL\" target=\"_blank\" rel=\"external nofollow noopener\">ucasFL<\/a>\u00a0\u6821\u5bf9\uff1a<a class=\"ext\" href=\"https:\/\/github.com\/wxy\" target=\"_blank\" rel=\"external nofollow noopener\">wxy<\/a><\/p>\n<p>\u672c\u6587\u7531\u00a0<a class=\"ext\" href=\"https:\/\/github.com\/LCTT\/TranslateProject\" target=\"_blank\" rel=\"external nofollow noopener\">LCTT<\/a>\u00a0\u539f\u521b\u7f16\u8bd1\uff0c<a href=\"https:\/\/linux.cn\/article-9491-1.html\">Linux\u4e2d\u56fd<\/a>\u00a0\u8363\u8a89\u63a8\u51fa<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5927\u5bb6\u597d\uff01\u4eca\u5929\uff0c\u6211\u5f00\u59cb\u8fdb\u884c\u6211\u7684\u00a0ruby <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[118],"class_list":["post-1320","post","type-post","status-publish","format-standard","hentry","tag-02-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/1320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=1320"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/1320\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=1320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=1320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=1320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}