2009-04-02 10 views
10

मैं विंडोज़ पर हूं, एमजीजी के तहत निर्मित निष्पादन योग्य पर जीडीबी चला रहा हूं। कार्यक्रम में अनंत लूप है। मैं इसे Ctrl-C दबाकर ढूंढना चाहता हूं। जब मैं करता हूं, कार्यक्रम और जीडीबी दोनों बाहर निकलें। ऐसा लगता है कि इस विषय पर सभी मदद मान लीजिए कि मैं लिनक्स पर हूं।मिनजीडब्ल्यू पर जीडीबी में, प्रोग्राम को रोकें Ctrl-C कैसे करें?

उत्तर

6

ऐसा इसलिए है क्योंकि gdb GUI (गैर-कंसोल) प्रोग्राम के ctrl-c ईवेंट को ठीक से संभाल नहीं करता है। आप यहां काम कर सकते हैं http://www.mingw.org/wiki/Workaround_for_GDB_Ctrl_C_Interrupt

+0

अरे, धन्यवाद। मैं इसे आज़मा दूंगा! –

+1

बहुत बुरा आप केवल विंडोज प्रोग्राम को डीबग करने के लिए वर्कअराउंड का उपयोग कर सकते हैं। मेरे लिए, मैं एक एंड्रॉइड प्रोग्राम डिबग कर रहा हूं :( – Qwertie

0

अनंत लूप को खोजने के लिए, आप तब तक निष्पादन के माध्यम से कदम उठाने का प्रयास कर सकते हैं जब तक कि आप अनिश्चित काल तक दोहराए जाने वाले अनुक्रम तक नहीं पहुंच जाते।

मुझे यकीन है कि नहीं हूँ, लेकिन मुझे लगता है Ctrl-C केवल निष्पादन बंद कर देना चाहिए, जो अपने आप GDB नहीं ...

मुझे लगता है कि एक "संभाल" कमांड है कि आप उपयोग कर सकते हैं कि कैसे नियंत्रित करने के लिए बाधा संकेत संभाला जाता है।

+0

मुझे पता है के लिए भी काम किया। मैं उम्मीद कर रहा था कि ऐसा न करें। –

+0

आप दोनों गिनती पर सही हैं, लेकिन ऐसा लगता है कि यह विंडोज डॉस-बॉक्स में काम नहीं करता है। –

3

आप किस "खोल" का उपयोग कर रहे हैं? यदि आप एमएसवाईएस "आरएक्सवीटी" खोल का उपयोग करते हैं, तो व्यवहार आपके वर्णन के अनुसार बहुत अधिक है। Ctrl-C केवल तभी काम करता है जब आप सामान्य Windows कमांड प्रॉम्प्ट से चल रहे हों।

+0

यह उपयोगी जानकारी है। मैं एक विंडोज कमांड प्रॉम्प्ट पर हूं, और यह काम नहीं कर रहा था, लेकिन मैं इसे एक और कोशिश दूंगा। –

+0

आप "कंसोल 2" भी आज़मा सकते हैं। यह विंडोज कमांड प्रॉम्प्ट के करीब व्यवहार करना चाहिए, लेकिन यह बहुत सुंदर है। मैं हर समय जीडीबी का उपयोग करता हूं, और कभी भी कोई समस्या नहीं होती है। https://sourceforge.net/projects/console/ –

2

मैंने अभी भी एक ही समस्या को मारा है।

विकी से कामकाज डीबग प्रक्रिया के ढक्कन के साथ debugbreak चलाने के लिए है, लेकिन ps यह पिड नहीं दिखाता है, केवल जीडीबी का पिड। शायद इसे प्राप्त करने का एक और तरीका है।

लेकिन सरल कामकाज है। बस सामान्य रूप से प्रोग्राम शुरू करें (gdb में नहीं), ps से पिड की जांच करें और इस तर्क के साथ gdb को दूसरे तर्क के रूप में प्रारंभ करें। जब जीडीबी संलग्न होता है तो प्रक्रिया बंद हो जाती है और मैं बैकट्रैस प्रिंट कर सकता हूं।

+1

धन्यवाद। कुछ समय पहले मैंने इस पर हिट किया: हिट^सी और डीबगर बंद हो जाता है, लेकिन यह मुख्य कार्यक्रम की तुलना में एक अलग धागे में बंद हो जाता है। अगर मैं जानकारी धागे करता हूं , यह मुख्य कार्यक्रम की धागा संख्या बताता है।फिर मैं उस धागे पर स्विच करता हूं, और मैं ढेर दिखाने के लिए 'बीटी' कर सकता हूं। मुझे लगता है कि यह किसी भी व्यक्ति के लिए बिल्कुल स्पष्ट है जो वास्तव में जीडीबी जानता है। –

0

यहाँ एक समाधान है कि हर बार काम करता है:

जब GDB इस रेगुलर एक्सप्रेशन का उपयोग अवर प्रक्रिया आईडी कब्जा करने के लिए शुरू होता है:

"\[New Thread (\d+)\." 

तब का उपयोग करें:

hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, PID); 
DebugBreakProcess(hProcess); 
CloseHandle(hProcess); 

एक है निम्नलिखित जीडीबी प्रारंभिक स्क्रिप्ट को देखें, इसके लिए विंडोज 7 पर मिनीजीडब्ल्यू के साथ काम करने की आवश्यकता है और बाद में:

# ===================================== 
# GDB preload initialization commands 
# ===================================== 

# Set Unicode Charset 
#set target-charset UCS-2 
#set host-charset UCS-2 
#set charset UCS-2 
#set target-wide-charset UCS-2 

# Set UTF-8 Charset 
set target-charset UTF-8 
set host-charset UTF-8 
set charset UTF-8 
set target-wide-charset UTF-8 

# Request async target mode 
set target-async 1 

# Do not complain about pending breakpoints 
set breakpoint pending on 

# Enable All-Stop for all Threads 
set non-stop off 

# Do not ask for confirmations 
set confirm off 

# Do not create new console for output/logging 
set new-console off 

# Turn-off paggination to allow integration with IDE 
set pagination off 

# Call Stack files (and anywhere else) should be absolute path 
set filename-display absolute 

# Enable Pretty Print in GDB Panel 
set print pretty on 

# Enable notification of completion for asynchronous execution commands. 
set exec-done-display on 

# Show Addresses in objects, required for integration with IDE 
set print address on 

# Enable Pretty Print for Arrays 
set print array on 

# Flatten objects, required for integration with IDE 
set print object off 

# Include static members, required for integration with IDE 
set print static-members on 

# Show demangled vtable, required for integration with IDE 
set print vtbl off 
set print demangle on 
set demangle-style gnu-v3 

# Print full eight-bit characters, required for integration with IDE 
set print sevenbit-strings off 

# Set path for obj files 
path $(TARGET_ROOT)/obj 

# Load gdb scripts for STL (string, vector, map, etc.) 
source $(PATH_SDK_DEBUGGER)/stl-views-1.0.3.gdb 

# List of source code files 
dir $(PATH_SDK_COMMON) 
dir $(PATH_SDK_FRAMEWORKS) 
dir $(PATH_SDK_INCLUDES) 
dir $(PROJECT_PATHS.NATIVE_COMMON) 

# Load the binary 
file $(TARGET_OUTPUT) 
0

मैथ्यू टैलबर्ट ने इंगित किया कि ऐसा होता है जब देशी मिनीजीडब्लू टूलचैन के साथ निर्मित जीडीबी का उपयोग एमएसवाईएस/सिगविन के अंदर किया जाता है। Winpty के साथ जीडीबी शुरू करना एक आकर्षण की तरह काम किया क्योंकि यह सिर्फ एक उपकरण है जो इसके लिए डिज़ाइन किया गया है। सीडीबी.एक्सई