{"id":395,"date":"2020-03-29T18:18:56","date_gmt":"2020-03-29T09:18:56","guid":{"rendered":"https:\/\/naru.jpn.com\/wordpress\/?p=395"},"modified":"2020-03-29T18:18:57","modified_gmt":"2020-03-29T09:18:57","slug":"lldb%e3%81%a7perl5%e3%81%ae%e5%ae%9f%e8%a1%8c%e4%b8%ad%e3%81%ae%e6%83%85%e5%a0%b1%e3%82%92%e8%aa%bf%e3%81%b9%e3%82%8b","status":"publish","type":"post","link":"https:\/\/naru.jpn.com\/wordpress\/?p=395","title":{"rendered":"lldb\u3067Perl5\u306e\u5b9f\u884c\u4e2d\u306e\u60c5\u5831\u3092\u8abf\u3079\u308b"},"content":{"rendered":"<p>lldb \u306e\u7df4\u7fd2\u3082\u517c\u306d\u3066, <a href=\"https:\/\/naru.jpn.com\/wordpress\/?p=357\">\u524d\u56de<\/a>\u30d3\u30eb\u30c9\u3057\u305f\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u4ed8\u304d\u306e perl5 \u3092\u4f7f\u3063\u3066\u30d6\u30ec\u30fc\u30af\u30dd\u30a4\u30f3\u30c8\u3092\u5f35\u3063\u305f\u308a\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3092\u898b\u305f\u308a\u3057\u3066\u307f\u307e\u3059.<\/p>\n<p><!--more--><\/p>\n<h3>\u30d7\u30ed\u30bb\u30b9ID\u304b\u3089 attach \u3057\u3066\u30d0\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3092\u8abf\u3079\u308b<\/h3>\n<p>\u524d\u56de\u306e\u30d7\u30ed\u30b0\u30e9\u30e0<\/p>\n<pre><code>print \"start loop program.\\n\";\nwhile (1) {\n  print \"loop.\\n\";\n  sleep(1);\n}\n<\/code><\/pre>\n<p>\u3092\u5b9f\u884c\u3057\u307e\u3059.<\/p>\n<pre><code>$ .\/output\/bin\/perl5.31.9 .\/sample.pl<\/code><\/pre>\n<p>ps \u3067\u30d7\u30ed\u30bb\u30b9\u306eID(PID)\u3092\u8abf\u3079\u307e\u3059.<\/p>\n<pre><code>$ ps\n  PID TTY           TIME CMD\n58175 ttys003    0:00.00 .\/output\/bin\/perl5.31.9 .\/sample.pl\n<\/code><\/pre>\n<p>lldb \u3092\u8d77\u52d5\u3057\u3066, -p \u30aa\u30d7\u30b7\u30e7\u30f3\u3067PID\u3092\u6307\u5b9a\u3057\u3066 attach \u3057\u307e\u3059.<\/p>\n<pre><code>$ lldb\n(lldb) attach -p 58175\nProcess 58175 stopped\n* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP\n    frame #0: 0x00007fff65463bba libsystem_kernel.dylib`__semwait_signal + 10\nlibsystem_kernel.dylib`__semwait_signal:\n-&gt;  0x7fff65463bba &lt;+10&gt;: jae    0x7fff65463bc4            ; &lt;+20&gt;\n    0x7fff65463bbc &lt;+12&gt;: movq   %rax, %rdi\n    0x7fff65463bbf &lt;+15&gt;: jmp    0x7fff6546268d            ; cerror\n    0x7fff65463bc4 &lt;+20&gt;: retq   \nTarget 0: (perl5.31.9) stopped.\n\nExecutable module set to \"\/Users\/naru\/repo\/perl\/perl-5.31.9\/output\/bin\/perl5.31.9\".\nArchitecture set to: x86_64h-apple-macosx-.\n<\/code><\/pre>\n<p>bt \u3067\u30d0\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3092\u78ba\u8a8d.<\/p>\n<pre><code>$ (lldb) bt\n* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP\n  * frame #0: 0x00007fff65463bba libsystem_kernel.dylib`__semwait_signal + 10\n    frame #1: 0x00007fff653e70fa libsystem_c.dylib`nanosleep + 196\n    frame #2: 0x00007fff653e6f62 libsystem_c.dylib`sleep + 41\n    frame #3: 0x0000000101f48390 perl5.31.9`Perl_pp_sleep at pp_sys.c:4867:11\n    frame #4: 0x0000000101ea44dd perl5.31.9`Perl_runops_standard at run.c:41:26\n    frame #5: 0x0000000101d7e584 perl5.31.9`S_run_body(oldscope=1) at perl.c:2764:2\n    frame #6: 0x0000000101d7dfd6 perl5.31.9`perl_run(my_perl=0x00007fe56cc01750) at perl.c:2687:2\n    frame #7: 0x0000000101d3c54a perl5.31.9`main(argc=2, argv=0x00007ffeedec4ae0, env=0x00007ffeedec4af8) at perlmain.c:127:9\n    frame #8: 0x00007fff653207fd libdyld.dylib`start + 1\n<\/code><\/pre>\n<p>sleep \u306e\u771f\u3063\u6700\u4e2d\u3089\u3057\u3044\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059. pp_sys.c \u306b\u3042\u308b Perl_pp_sleep \u304c\u547c\u3070\u308c\u3066\u3044\u308b\u3089\u3057\u3044.<\/p>\n<h3>\u95a2\u6570\u540d\u304b\u3089\u30d6\u30ec\u30fc\u30af\u30dd\u30a4\u30f3\u30c8\u3092\u5f35\u308b<\/h3>\n<p>\u5148\u307b\u3069\u306e\u95a2\u6570 Perl_pp_sleep \u306b\u30d6\u30ec\u30fc\u30af\u30dd\u30a4\u30f3\u30c8\u3092\u5f35\u3063\u3066\u51e6\u7406\u3092\u518d\u958b\u3057\u3066\u307f\u307e\u3059.<\/p>\n<pre><code>$ (lldb) breakpoint set -n Perl_pp_sleep\nBreakpoint 1: where = perl5.31.9`Perl_pp_sleep + 46 at pp_sys.c:4850:5, address = 0x0000000101f481de<\/code><\/pre>\n<pre><code>$ (lldb) continue\nProcess 58175 resuming\nProcess 58175 stopped\n* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1\n    frame #0: 0x0000000101f481de perl5.31.9`Perl_pp_sleep at pp_sys.c:4850:5\n   4847\t\n   4848\tPP(pp_sleep)\n   4849\t{\n-&gt; 4850\t    dSP; dTARGET;\n   4851\t    Time_t lasttime;\n   4852\t    Time_t when;\n   4853\t\nTarget 0: (perl5.31.9) stopped.<\/code><\/pre>\n<p>\u3053\u308c\u3067\u5b9f\u884c\u4e2d\u306e\u30b3\u30fc\u30c9\u306e\u7b87\u6240\u3092\u8abf\u3079\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f.<\/p>\n<p>\u3061\u306a\u307f\u306b, PP(pp_sleep) \u306f <a href=\"https:\/\/github.com\/Perl\/perl5\/blob\/8234439d1b57e10c5bbb0b024eeb325ea1a4b50a\/pp.h#L11\">pp.h(L.11)<\/a> \u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059.<\/p>\n<pre><code>#define PP(s) OP * Perl_##s(pTHX)<\/code><\/pre>\n<p>Perl \u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u30de\u30af\u30ed\u304c\u591a\u7528\u3055\u308c\u3066\u3044\u307e\u3059. PP \u3063\u3066\u306a\u3093\u3067\u3057\u3087\u3046\u306d.<\/p>\n<h3>\u53c2\u8003\u306b\u3055\u305b\u3066\u3044\u305f\u3060\u3044\u305f\u30b5\u30a4\u30c8<\/h3>\n<p><a href=\"https:\/\/tutorial.perlzemi.com\/blog\/20130416136637.html\">Perl\u306e\u8a00\u8a9e\u5b9f\u88c5\u306e\u7814\u7a76<\/a><br \/>\n<a href=\"https:\/\/engineer.dena.jp\/2011\/04\/perlgdb.html\">Perl\u306e\u4e2d\u3092gdb\u3067\u8997\u304f<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>lldb \u306e\u7df4\u7fd2\u3082\u517c\u306d\u3066, \u524d\u56de\u30d3\u30eb\u30c9\u3057\u305f\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u4ed8\u304d\u306e perl5 \u3092\u4f7f\u3063\u3066\u30d6\u30ec\u30fc\u30af\u30dd\u30a4\u30f3\u30c8\u3092\u5f35\u3063\u305f\u308a\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3092\u898b\u305f\u308a\u3057\u3066\u307f\u307e\u3059.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,7],"tags":[],"_links":{"self":[{"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/395"}],"collection":[{"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=395"}],"version-history":[{"count":6,"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/395\/revisions"}],"predecessor-version":[{"id":402,"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/395\/revisions\/402"}],"wp:attachment":[{"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naru.jpn.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}