{"id":12215,"date":"2021-09-10T14:26:46","date_gmt":"2021-09-10T14:26:46","guid":{"rendered":"http:\/\/www.max-sperling.bplaced.net\/?p=12215"},"modified":"2024-02-16T10:19:05","modified_gmt":"2024-02-16T10:19:05","slug":"easy-coredump-example-ubunutu-gdb","status":"publish","type":"post","link":"http:\/\/www.max-sperling.bplaced.net\/?p=12215","title":{"rendered":"Easy coredump example (Apport, GDB)"},"content":{"rendered":"<p><strong>Setup apport<\/strong><\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\n$ cd ~\/.config &amp;&amp; mkdir apport &amp;&amp; cd apport &amp;&amp; touch settings\r\n~\/.config\/apport$ printf &quot;[main]\\nunpackaged=true\\n&quot; &gt;&gt; settings\r\n<\/pre>\n<hr>\n<p><strong>Source code<\/strong><\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\nclass Player {\r\npublic:\r\n  enum PlayerState {\r\n    STOPPED,\r\n    PLAYING,\r\n    PAUSED\r\n  };\r\n  Player() : m_State(STOPPED) {}\r\n  void play() { m_State = PLAYING; }\r\n  void paused() { m_State = PAUSED; }\r\n  void stop() { m_State = STOPPED; }\r\nprivate:\r\n  PlayerState m_State;\r\n};\r\n\r\nint main() {\r\n  Player* player;\r\n  player-&gt;play();\r\n  return 0;\r\n}\r\n<\/pre>\n<hr>\n<p><strong>Coredump analysis<\/strong><\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\n$ g++ main.cpp -g\r\n$ .\/a.out\r\nSegmentation fault (core dumped)\r\n$ apport-unpack \/var\/crash\/&lt;core_dump&gt; &lt;dest_dir&gt;\r\n\r\n$ gdb a.out &lt;dest_dir&gt;\/CoreDump\r\nCore was generated by `.\/a.out&#039;.\r\nProgram terminated with signal SIGSEGV, Segmentation fault.\r\n#0  0x00000000004004fe in Player::play (this=0x0) at main.cpp:9\r\n9\t  void play() { m_State = PLAYING; }\r\n(gdb) bt\r\n#0  0x00000000004004fe in Player::play (this=0x0) at player.cpp:11\r\n#1  0x00000000004004ea in main () at player.cpp:21\r\n(gdb) up\r\n(gdb) info locals\r\nplayer = 0x0\r\n(gdb) p player\r\n$1 = (Player *) 0x0\r\n(gdb) p *player\r\nCannot access memory at address 0x0\r\n<\/pre>\n<p>Issue: player hasn&#8217;t been initialized before calling play().<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Setup apport Source code Coredump analysis Issue: player hasn&#8217;t been initialized before calling play().<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false},"categories":[28],"tags":[],"_links":{"self":[{"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/posts\/12215"}],"collection":[{"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=12215"}],"version-history":[{"count":1,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/posts\/12215\/revisions"}],"predecessor-version":[{"id":16725,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/posts\/12215\/revisions\/16725"}],"wp:attachment":[{"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12215"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}