2010-01-22 10 views
68

Ich möchte gdb haben sofort die ausführbare Datei ausführen, als ob ich "run" eingegeben hätte (Motivation: Ich mag nicht tippen "run").gdb - Wie wird die ausführbare Datei automatisch ausgeführt?

Eine Möglichkeit ist, Rohr der Befehl gdb wie folgt aus:

$ echo run | gdb myApp 

Aber das Problem mit diesem Ansatz ist, dass Sie die Interaktivität mit gdb, zB verlieren. Wenn ein Haltepunkt ausgelöst wird oder myApp abstürzt, wird gdb beendet. Diese Methode wird here diskutiert.

Mit Blick auf die Optionen in --help sehe ich keinen Weg, dies zu tun, aber vielleicht fehlt mir etwas.

Antwort

99
gdb -ex run ./a.out 

Wenn Sie Argumente a.out weitergeben müssen:

gdb -ex run --args ./a.out arg1 arg2 ... 

EDIT: Orion sagt dies nicht auf Mac OSX funktioniert.

Die -ex Flagge ist seit GDB-6.4 (2005 veröffentlicht) zur Verfügung, aber OSX nutzt Gabel von GDB von Apple und die neuesten XCode für Leopard enthält GDB 6.3.50-20050815 (Apple version gdb-967), so dass Sie kein Glück.

Der aktuelle Strom GDB-7.0.1 Release ist eine mögliche Lösung. Seien Sie sicher, dass Sie this lesen.

+1

Danke für die Antwort. diese Zeile verhält sich genauso wie nur "gdb ./a.out" für mich tho. –

+2

Ich habe gerade bestätigt, dass Sie auch mehrere -ex-Optionen in der Befehlszeile übergeben können, und sie werden in der Reihenfolge ausgeführt, bevor Sie die gdb-Eingabe an Sie übertragen. –

+0

Wer weiß, wie das mit OSX funktioniert? – Dave

20

würde ich ein gdb-Skript verwenden:

gdb -x your-script 

wo your-Skript enthält so etwas wie:

file a.out 
b main 
r 

danach haben Sie die normale interaktive gdb Prompt

EDIT:

hier ist eine Optimierung für die wirklich faul:

  1. Speichern Sie das Skript als .gdbinit im working directory.
  2. Danach Sie gdb als

    gdb

... und gdb automatisch lädt und ausführt, den Inhalt .gdbinit einfach laufen.

+0

hey danke für die Antwort. das sieht aus wie genau das, was ich will, außer ich bekomme nicht die gdb prompt, ich bekomme gdb suspendiert und ich bin wieder an der Befehlszeile, als ob ich "ctrl-z" getippt hätte. Wenn ich "fg", dann wird gdb fortgesetzt und die App läuft. das ist OS X. –

+0

orion: mmmh - das ist überraschend für mich. Funktioniert gut mit jeder UNIX-Variante, die ich tatsächlich verwende (Linux, Solaris, AIX). Welche gdb Version benutzt du? –

+0

Ich habe gerade das Verhalten dieser überprüft - immer noch verlässt mich auf die Befehlszeile w/gdb suspended.GNU gdb 6.3.50-20050815 (Apple-Version gdb-1518) (Sa Feb 12 02:52:12 UTC 2011). –

19

Die Katze erlaubt Ihnen, nach gdb bricht zu tippen.

+0

whoa, genial. Sie müssen ctrl-c nach dem Beenden von gdb, um die Katze zu stoppen, aber das ist großartig. –

+3

Es sieht so aus, als ob Sie dabei ein Schlüsselsteuerelement auf der gdb-Instanz verlieren. –

+0

Darüber hinaus Fragen wie 'Make Breakpoint ausstehende zukünftige gemeinsame Bibliothek laden? (y oder [n]) 'nimmt automatisch die Antwort" Nein "an. – Ruslan

3

gdb -x <(echo run) --args $program $args

4

Start ist eine weitere gute Option:

gdb -ex start ./a.out 

Es ist wie laufen, sondern setzt auch einen temporären Haltepunkt an main und bleibt dort stehen.

Dieser temporäre Haltepunkt ist deaktiviert, sobald er getroffen wird.

Verwandte Themen