2010-04-24 14 views
8

Pencere üzerinde gdb'yi nasıl kurabilirim, böylece bir programın onaylama hatası sonlandırılmasına izin vermez. Programdaki yığın izleme ve değişkenleri kontrol etmeyi planlıyorum. gdb MinGW'nin 'g++ -g test.cpp -o test' ile derlenmiş bu test.cpp programı çalıştıran ÖrneğinWindows üzerinde gdb ile MinGW programı hata ayıklama, hata durumunda sonlanmadı

:

#include <cassert> 
int main(int argc, char ** argv) { assert(1==2); return 0; } 

verir:

$ gdb test.exe 
GNU gdb 6.8 
Copyright (C) 2008 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "i686-pc-mingw32"... 
(gdb) r 
Starting program: f:\code/test.exe 
[New thread 4616.0x1200] 
Error: dll starting at 0x77030000 not found. 
Error: dll starting at 0x75f80000 not found. 
Error: dll starting at 0x77030000 not found. 
Error: dll starting at 0x76f30000 not found. 
Assertion failed: 1==2, file test.cpp, line 2 

This application has requested the Runtime to terminate it in an unusual way. 
Please contact the application's support team for more information. 

Program exited with code 03. 
(gdb) 
ben sonlandırma programı durdurmaya muktedir istiyorum

Visual Studio'nun hata ayıklayıcı ve Linux'taki gdb'nin yaptığı gibi. Bir arama yaptım ve sinyalleri yakalama konusunda bazı şeyler buldum ama bunu yapmak için gdb'yi nasıl ayarlayacağına dair iyi bir gönderi bulamıyorum.

cevap

5

Sadece Çıkışta bir kesme noktası ayarlayın:

(gdb) b exit

+0

Nasıl yüklenmesini engellerim: Yüklü sembollerde tanımlanmamış "çıkış" fonksiyonu. Gelecekteki paylaşılan kitaplık yükünde kesme noktası beklemede mi? (y veya [n]) y Kesme noktası 1 (çıkış) beklemede. – devil

6

kesme noktası hatları ile .gdbinit dosyada konabilir ortaya Bulunan: Bu girme gereğini ortadan kaldırır

set breakpoint pending on 
b exit 

evet pencereler için. son kullanma

1

(2017 Mart) kullanmanız gereken gcc 6.3 ve gdb 7.12.1 ile msys2:

break _exit 

yani _exit değil exit kullanın. Bunun başka durumlarda da çalışmasını beklerim, çünkü exit'un aslında çıkması için _exit'u arayacağını tahmin ediyorum.

İlgili konular