Frage

Während der Verwendung von trace, fand ich, dass einige Funktionen nicht in der Liste der Quelle, während Sie versuchen, Sie zu finden, um einen Haltepunkt.Diese Funktionen scheint nur angezeigt, wenn ich die Quelle in der Montage-format.

Ich Sprach meine Senioren sagten Sie mir, wenn jede Funktion nur einmal aufgerufen, es wird optimieren die Spur und erscheint als inline-somit kann gesehen werden in der Montage.

Meine Fragen sind:

  1. Wie wirkt sich diese Optimierung geschieht durch Lauterbach?
  2. Ist das vorteilhaft??
War es hilfreich?

Lösung

Es gibt ein paar Dinge:

  1. Über die Anweisung Ich fand, dass einige Funktionen nicht in der Liste der Quelle, während Sie versuchen, Sie zu finden, um ein Haltepunkte"überprüfen Sie die Mapping-Datei/Map-Datei die darin besteht, die verschiedenen Funktionen, die verwendet wurden, in den bauen, deren Standorte im Speicher usw. und wenn Sie nicht finden, Ihre Funktion dort gibt, als einfach Blick in die Optimierung [Nur, das könnte das Problem sein].

  2. Wie zu Recht darauf hingewiesen, daß die Optimierung ist jedoch nicht von der Lauterbach aber es erledigt der compiler.Normalerweise gibt es verschiedene Optimierungs-levels [in ARM haben wir O0-O2] wo O0 ist die höchste Optimierung möglich, aber dies sollte nur verwendet werden, wenn es eine Pressemitteilung, um die Kunden sonst Optimierung O2 sollte für das debugging verwendet werden.

  3. Wenn Sie glauben, das Funktion könnte optimiert werden, indem der compiler versuchen Sie es volatile.

  4. Andere Punkt, der vielleicht nicht [direkt] zu diesem Zusammenhang aber helfen könnte, ist, zu wissen, "In welchem Bereich des Speichers wird Ihre Datei befindet sich" da viele Male, wenn Sie Debuggen möchten, und etwas, die Seite ist noch nicht in der RAM, werden Sie nicht in der Lage zu setzen die Haltepunkte bis zu der Zeit, dass die Seite im RAM [im Grunde so etwas wie On-Demand-Paging, wenn Sie in Ihrem system]

Hoffe, das hilft.

-hjsblogger

Andere Tipps

Die Optimierung wird durch den Compiler durchgeführt, nicht von der Lauterbach. Der Compiler versucht seine Assemblersprache Leistung zu optimieren, und die Standardeinstellungen werden in der Regel Funktionen inline, die nur einmal aufgerufen werden.

diese Optimierungen zu Testzwecken außer Kraft zu setzen, können Sie den Compiler-Flag -. No_inline

Inlining eine Funktion, die nur einmal aufgerufen wird vom Compiler durchgeführt werden kann.

Der Vorteil ist, dass es den Aufwand für einen Funktionsaufruf speichert (Laufzeit, Coderaum und Stapelspeicher), und Sie können immer noch den Code in einem schönen modular wie mehrere Funktionen schreiben.

Der Nachteil ist, dass das Debuggen wird schwieriger, weil während der Funktion Debuggen gemischt wird mit dem Anrufer auf.

w.r.t. das Verhalten des Trace-Tool Ihre Frage ist eher unklar.

Wenn es eine Funktion aufgerufen wird, dass Sie nicht in Ihrem Quellcode finden es unwahrscheinlich ist aus 2 Gründen wegen inlined Funktionen sein:

  1. inlined Funktionsaufrufe werden nicht als Subroutinenaufrufe in dem Assembler-Code angezeigt - der Code, um die Funktion zu implementieren, wird inline an dem Punkt emittiert, wo der Funktionsaufruf anders sein würde (das ist, was inlining ist)

  2. , wenn der Compiler inlines Ihre Funktion aufruft, die Funktionsnamen (wenn Sie es in der Montage Ausgabe sehen konnten) würden immer noch einen Teil des Quellcodes sein -. Das ist, wo der Compiler den Code inline würde immer

Aber, Compiler manchmal Einsatz mysteriös Funktionsaufrufe interne Hilfsfunktionen in den generierten Code Dinge wie arithmetische Operationen zu implementieren, dass die CPU nicht unterstützt direkt (Integer-Division oder Gleitkomma-Operationen zum Beispiel).

Was sind die Namen der 'Mystery Funktionen'?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top