Debugging — Änderungen 2455 → 2695

Zeile 20: Zeile 20:
 
Sobald man die Adresse hat, muss man daraus irgendwie auf die Codestelle schließen können. Dabei kann das GNU-Tool objdump eine große Hilfe sein. Dies ist aber nur möglich, wenn man ein Binärformat wie [[elf|ELF]] benutzt, bei flachen Binaries fehlen dem Tool nötige Informationen. objdump kann dabei mit dem Parameter -d Assembler-Code mit Adresse vor jeder Instruktion generieren. Wenn man den Code mit Debug-Infos (bei gcc mit dem Parameter -g) kompiliert und linkt kann objdump mit dem Parameter -S sogar den zugehörigen Quelltext der ursprünglichen Sprache anzeigen.
 
Sobald man die Adresse hat, muss man daraus irgendwie auf die Codestelle schließen können. Dabei kann das GNU-Tool objdump eine große Hilfe sein. Dies ist aber nur möglich, wenn man ein Binärformat wie [[elf|ELF]] benutzt, bei flachen Binaries fehlen dem Tool nötige Informationen. objdump kann dabei mit dem Parameter -d Assembler-Code mit Adresse vor jeder Instruktion generieren. Wenn man den Code mit Debug-Infos (bei gcc mit dem Parameter -g) kompiliert und linkt kann objdump mit dem Parameter -S sogar den zugehörigen Quelltext der ursprünglichen Sprache anzeigen.
 
Dieses Feature macht aber scheinbar in den aktuellen Versionen vorallem bei großen Dateien noch Probleme. Dabei wird der Quellcode am Anfang oft noch angezeigt, dann aber irgendwann wird nur noch der Assembler-Code angezeigt. Das kann man am besten umgehen, indem man den Abstand der gesuchten Speicherstelle zum Funktionsanfang berechnet, und danach nur den Dump der entsprechenden Objektdateien ansieht.
 
Dieses Feature macht aber scheinbar in den aktuellen Versionen vorallem bei großen Dateien noch Probleme. Dabei wird der Quellcode am Anfang oft noch angezeigt, dann aber irgendwann wird nur noch der Assembler-Code angezeigt. Das kann man am besten umgehen, indem man den Abstand der gesuchten Speicherstelle zum Funktionsanfang berechnet, und danach nur den Dump der entsprechenden Objektdateien ansieht.
 +
 +
[[Kategorie:Lizenz ungeklärt]]