2016-12-02 1 views
-4

Я пытаюсь найти ошибку сегментации в файле c, который используется исполняемым файлом, но я не нашел никаких указаний. Кто-нибудь знает как это сделать?Как использовать gdb для поиска ошибок сегментации в файле .exe

+1

Вы действительно ничего не нашли по всему миру относительно отладки с помощью gdb? – kaylum

+0

@kaylum Это похоже на истребительный клуб - чтобы найти что-то о том, что вам нужно, вы должны знать, что вам нужно. и современные поисковые системы плохи в новой теме .. они пытаются оттолкнуть что-нибудь новое по релевантности. Хорошее руководство https://beej.us/guide/bggdb/ – Swift

+0

Я ничего не мог найти. Из ссылки, которую Свифт дал мне, я предполагаю, что я был конкретным с моим поисковым запросом, а не поиском достаточно широко. – user3304124

ответ

0

Запустите gdb и запустите свою программу из gdb, затем используйте обратную трассировку. вы получите стек кадров, который вы можете пройти командой fram и использовать print для проверки значений переменных. Проверьте gdb tips \ docs через Интернет. Вы можете использовать gdb для загрузки уже существующего файла ядра, созданного разбитой программой, чтобы найти место, где возникла проблема. Загруженный файл ядра равен состоянию в момент сбоя, вы просто используете backtrace.

Ответ на ваш вопрос здесь: Determine the line of C code that causes a segmentation fault?

2

Вот пример программы, которая, несомненно, вызовет ошибку сегментации:

включают

int main() { 
    int *pVal = NULL; 

    printf("ptr value is : %d", *pVal); 
    return 0; 
} 

Вы должны компилировать в режиме отладки, чтобы добавить дополнительную отладочную информацию в исполняемый файл:

gcc -g segFault.c 

Тогда вам нужно только запустить gdb и указать путь исполняемого файла (в этом случае a.out). Затем, просто запустив его, вы увидите, что gdb выделяет строку, вызывающую ошибку сегментации.

~/Dropbox/cprog/demos : $ gdb a.out 
GNU gdb (GDB) 7.12 
Copyright (C) 2016 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 "x86_64-apple-darwin15.6.0". 
Type "show configuration" for configuration details. 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>. 
Find the GDB manual and other documentation resources online at: 
<http://www.gnu.org/software/gdb/documentation/>. 
For help, type "help". 
Type "apropos word" to search for commands related to "word"... 
Reading symbols from a.out...Reading symbols from /Users/rohankumar/Dropbox/cprog/demos/a.out.dSYM/Contents/Resources/DWARF/a.out...done. 
done. 
(gdb) run 
Starting program: /Users/rohankumar/Dropbox/cprog/demos/a.out 

Program received signal SIGSEGV, Segmentation fault. 
0x0000000100000f62 in main() at segFault.c:6 
6  printf("ptr value is : %d", *pVal); 

Вы также можете распечатать значения и увидеть стеке программы. Вы можете узнать больше о gdb here.

Счастливое кодирование!

+0

Существует * nix Dropbox? Ухоженная! – Swift

Смежные вопросы