2010-04-24 65 views
8

Làm cách nào để thiết lập gdb trên cửa sổ để nó không cho phép chương trình có xác nhận không kết thúc? Tôi dự định kiểm tra dấu vết ngăn xếp và các biến trong chương trình.Gỡ lỗi chương trình MinGW với gdb trên Windows, không chấm dứt khi xác nhận lỗi

Ví dụ, chạy chương trình test.cpp này được biên soạn với MinGW 'g++ -g test.cpp -o test' trong gdb:

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

Cung cấp:

$ 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) 

Tôi muốn để có thể ngăn chặn các chương trình từ chấm dứt ngay lập tức, giống như cách trình gỡ lỗi của Visual Studio và gdb trên Linux thực hiện nó. Tôi đã thực hiện một tìm kiếm và tìm thấy một số công cụ trên bẫy tín hiệu nhưng tôi dường như không thể tìm thấy một bài tốt về cách thiết lập gdb để làm điều này.

Trả lời

5

Chỉ cần thiết lập một breakpoint xuất cảnh:

(gdb) b exit

+0

làm cách nào để ngăn chặn yêu cầu về: Chức năng "thoát" không được xác định trong các biểu tượng được tải. Đặt điểm ngắt đang chờ xử lý đối với tải thư viện được chia sẻ trong tương lai? (y hoặc [n]) y Điểm ngắt 1 (thoát) đang chờ xử lý. – devil

6

Tìm thấy ra rằng breakpoint có thể được đặt trong file .gdbinit với các dòng:

set breakpoint pending on 
b exit 

này loại bỏ sự cần thiết phải nhập yes cho cửa sổ.

1

Sử dụng gần đây (tháng 3 năm 2017) msys2 với gcc 6.3 và gdb 7.12.1 bạn nên sử dụng:

break _exit 

ví dụ: sử dụng _exit và không exit. Tôi hy vọng điều này cũng hoạt động trong các trường hợp khác như tôi mong đợi rằng exit sẽ gọi _exit để thực sự thoát.

Các vấn đề liên quan