Yürütülebilir dosya GDB'de otomatik olarak nasıl çalıştırılır?


92

Ben almak istiyorum gdb(: Ben "run" yazarak sevmediğim motivasyon) Ben "run" yazarak yaptığınız gibi hemen yürütülebilir çalıştırın.

Bunun bir yolu, komutu gdbşu şekilde değiştirmektir:

$ echo run | gdb myApp

Ancak bu yaklaşımla ilgili sorun gdb, örneğin ile etkileşiminizi kaybetmenizdir . bir kesme noktası tetiklenir veya myAppçökerse, gdbçıkar. Bu yöntem burada tartışılmaktadır .

İçindeki seçeneklere baktığımda --help, bunu yapmanın bir yolunu göremiyorum, ama belki de bir şeyleri kaçırıyorum.

Yanıtlar:


129
gdb -ex run ./a.out

Argümanları şunlara iletmeniz gerekiyorsa a.out:

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

DÜZENLEME: Orion , bunun Mac OSX'te çalışmadığını söylüyor.

-exBayrak yana kullanılmaktadır GDB-6.4(2005'te yayınlandı), ancak OSX GDB Apple'ın çatalı kullanır ve Leopard için en son XCode içeren GDB 6.3.50-20050815 (Apple version gdb-967)şans dışında yani.

Mevcut GDB-7.0.1sürümü oluşturmak olası bir çözümdür. Sadece mutlaka okuyun bu .


1
Cevap için teşekkürler. bu satır benim için sadece "gdb ./a.out" gibi davranıyor tho.
orion elenzil

3
Komut satırında birden çok -ex seçeneği de geçirebileceğinizi ve gdb girişini size aktarmadan önce sırayla çalışacaklarını onayladım.
Tung Nguyen

Programda aşağıdaki gibi argümanlar varsa bu çözüm çalışmaz:./a.out a b
gigilibala

OSX / xcode artık gdb'yi kutunun dışında desteklemediğinden (lldb yeni gdb'dir), bu artık daha iyi bir yaklaşım gibi görünüyor.
orion elenzil

Bir komut dosyası yaptım ve gdb -xLinux sistemlerinde kullandım. OS X, LLVM ve clang kullanır, bu nedenle lldb.
Daisuke Aramaki

23

Bir gdb komut dosyası kullanırdım:

gdb -x your-script

nerede senin-komut gibi bir şey içerir:

file a.out
b main
r

daha sonra normal interaktif gdb komut istemine sahip olursunuz

DÜZENLE :

işte gerçekten tembel olanlar için bir optimizasyon:

  1. olarak senaryoyu kurtarmak .gdbinitiçinde working directory.
  2. Daha sonra gdb'yi

    gdb

... ve gdb, .gdbinit içeriğini otomatik olarak yükler ve çalıştırır.


hey cevap için teşekkürler. bu sadece istediğim gibi görünüyor, ancak gdb istemini almazsam, gdb askıya alınır ve "ctrl-z" yazmışım gibi komut satırına geri döndüm. "fg" ise, gdb devam eder ve uygulama çalışır. burası OS X.
orion elenzil

orion: mmmh - bu benim için şaşırtıcı. Aslında kullandığım her UNIX çeşidiyle (Linux, Solaris, AIX) iyi çalışıyor. Hangi gdb sürümünü kullanıyorsunuz?

bunun davranışını yeniden doğruladım - beni hala w / gdb suspended.GNU gdb 6.3.50-20050815 (Apple sürümü gdb-1518) (Cts Feb 12 02:52:12 UTC 2011) komut satırına çıkar.
orion elenzil

Eğer koyarsanız, ama neden yok fikri @orionelenzil fgsonra rçizgi, o sanely davranır
dbr


20
(echo r ; cat) | gdb a.out

Kedi, gdb aralarından sonra yazmaya devam etmenizi sağlar.


whoa, harika. kediyi durdurmak için gdb'den çıktıktan sonra ctrl-c yapmanız gerekir, ama bu harika.
orion elenzil

3
Bunu kullanarak gdb örneğindeki bazı anahtar kontrolünü kaybetmişsiniz gibi görünüyor.
Treviño

Ayrıca, gibi sorular Make breakpoint pending on future shared library load? (y or [n])otomatik olarak "Hayır" cevabını alacaktır.
Ruslan

6

start komut

Bu komut başka bir iyi seçenektir:

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

Çalıştırma gibidir, ancak aynı zamanda geçici bir kesme noktası belirler mainve orada durur.

Bu geçici kesme noktası, vurulduğunda devre dışı bırakılır.

starti

Ayrıca startiprogramı başlatan ve bunun yerine ilk talimatta duran bir ilgili de vardır, ayrıca bakınız: GDB'deki ilk makine kodu talimatında durdurma

Bazı düşük seviyeli şeyler yaptığınızda harika.


4

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.