{"id":62,"date":"2006-05-09T08:46:33","date_gmt":"2006-05-09T06:46:33","guid":{"rendered":"http:\/\/my.stargazer.at\/?p=62"},"modified":"2007-06-19T15:43:05","modified_gmt":"2007-06-19T13:43:05","slug":"was-ging-denn-jetzt-schon-wieder-schief","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2006\/05\/09\/was-ging-denn-jetzt-schon-wieder-schief\/","title":{"rendered":"Was ging denn jetzt schon wieder schief?"},"content":{"rendered":"<p>Backtraces, Stack-Traces oder wie man diese Teile nun bezeichnet ist eigentlich egal &#8211; Um es auf den Punkt zu bringen, wir reden von Debugging und der Interpr\u00e4tation von Fehlern indem wir uns den Inhalt des Stacks eines Programmes ansehen.<\/p>\n<p><!--more--><\/p>\n<p>Um dies zu bewerkstelligen ben\u00f6tigen wir eine Umstellung unseres Systems, da der GCC keine Debug-Informationen in Binaries einbaut, da dies zu gr\u00f6sseren Binaries und somit oftmals zu einem Performance-Verlust f\u00fchrt. Dieses Verhalten kann man jedoch mit den entsprechenden CFLAGS unseren W\u00fcnschen entsprechend ver\u00e4ndern:<\/p>\n<blockquote><p><code>CFLAGS=\"-march=pentium-m -Os -ggdb\"<\/code><\/p><\/blockquote>\n<p>Ich verwende zwar Gentoo-Linux, aber wieso auf einmal keine grossen Optimierungen mehr? Das Optimieren von Binaries ver\u00e4ndert sie dermassen, dass ein Debugger wie der gdb den Stack nicht mehr ablaufen kann und somit die Debug-Info verloren geht. &#8222;-fomit-frame-pointer&#8220; ist desweiteren, nebst -O3 ein Flag welches den Debugger verwirrt.<\/p>\n<p>Ach ja&#8230; und dann war da noch hardened- bzw SELinux und PIE &#8211; mit anderen Worten: Optimierungen &#8211; sowohl Geschwindigkeit als auch Sicherheit sind f\u00fcr Debugging-Zwecke nicht vorgesehen.<\/p>\n<p>Nachdem die CFLAGS ge\u00e4ndert wurden gibt es noch ein paar Dinge, die man beachten sollte, wie z.B. dass Gentoo Linux Binaries stripped. Moment mal&#8230; Nackte Programme? Machen die auch Table-Dance? &#8211; Da muss ich leider entt\u00e4uschen. Stripping heisst, dass Sektionen der Binaries, welche nicht zum Ausf\u00fchren des Programms ben\u00f6tigt &#8211; dies betrifft auch unsere Debug-Info &#8211; entfernt werden. Eine einfache M\u00f6glichkeit bietet das Hinzuf\u00fcgen von &#8217;nostrip&#8216; zu den FEATURES der make.conf um diese zu behalten.<\/p>\n<p>Der elegantere Weg jedoch ist das Feature &#8217;splitdebug&#8216;, welches die Debug-Informationen in <em>\/usr\/lib\/debug<\/em> ablegt, um sie getrennt von der Binary aufzubewahren. Dies passiert w\u00e4hrend des Strippens und wird bei &#8217;nostrip&#8216; <strong>nicht<\/strong> durchgef\u00fchrt.<\/p>\n<p>Auf diesem Weg erhalten wir die Debug-Info um sie einem entsprechenden Debugger wie dem gdb zur Verf\u00fcgung zu stellen.<br \/>\nNun denn: Happy <em>emerge -e world<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Backtraces, Stack-Traces oder wie man diese Teile nun bezeichnet ist eigentlich egal &#8211; Um es auf den Punkt zu bringen, wir reden von Debugging und der Interpr\u00e4tation von Fehlern indem wir uns den Inhalt des Stacks eines Programmes ansehen.<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[231],"class_list":["post-62","post","type-post","status-publish","format-standard","hentry","category-it-related-stuff","tag-debug"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/62","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=62"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/62\/revisions"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=62"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=62"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=62"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}