GDB не работает, получая [New Thread 0xf03 процесса 20199] в качестве вывода - PullRequest
1 голос
/ 27 января 2020

GDB, похоже, совсем не работает для меня. Я скомпилировал свою программу, используя опцию -g, и я пытаюсь использовать очень простую C программу для проверки работоспособности, и она не работает.

Вот программа C, которую я использую:

#include <stdio.h>

int main(int argc, char * argv[]){

  printf("Hey");

  return 0;
}

Я скомпилировал ее с помощью этой команды: gcc -std=c99 -g -o test test.c

При запуске GDB это то, что я получаю :

...
 $ gdb ./test
GNU gdb (GDB) 8.3.1
Copyright (C) 2019 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-darwin18.7.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 ./test...
Reading symbols from /Users/Braulio/Programming/C/ComputerArchitecture/floatingPoint/test.dSYM/Contents/Resources/DWARF/test...
(gdb) run
Starting program: /Users/Braulio/Programming/C/ComputerArchitecture/floatingPoint/test
[New Thread 0xd03 of process 13458]

и он просто зависает здесь.

У меня ранее были проблемы с codeign, я следовал инструкциям, приведенным здесь https://sourceware.org/gdb/wiki/PermissionsDarwin У меня больше нет вопрос кодов

Обновление

Я следовал рекомендациям пользователя 3629249

Скомпилировано с использованием: $ gcc -std=c99 -ggdb3 -Wall -Wextra -Wconversion -pedantic -c test.c -o test.o

Оно все еще висит на [New Thread 0x1203 of process 17921]

 $ gdb test.o
GNU gdb (GDB) 8.3.1
Copyright (C) 2019 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-darwin18.7.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 test.o...
(gdb) break main
Breakpoint 1 at 0xf: file test.c, line 40.
(gdb) run
Starting program: /Users/Braulio/Programming/C/ComputerArchitecture/floatingPoint/test.o
[New Thread 0x1203 of process 17921]

Однако на этот раз это только чтение символов из одного места

Ответы [ 2 ]

1 голос
/ 27 января 2020

Строка

Чтение символов из /Users/Braulio/Programming/C/ComputerArchitecture/floatingPoint/test.dSYM/Contents/Resources/DWARF/test...

беспокоит меня. Я подозреваю, что в вашем каталоге есть другие вещи, к которым GDB неявно обращается. Я не понимаю эту строку, и она работает для меня (хотя отсутствие новой строки в выходных данных немного беспокоит).

Я считаю, что нотация "Новая тема" также неожиданна.

Для справки:

$ gdb ./test
GNU gdb (Debian 8.3.1-1) 8.3.1
Copyright (C) 2019 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 "arm-linux-gnueabihf".
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 ./test...
(gdb) run
Starting program: /tmp/test
Hey[Inferior 1 (process 14573) exited normally]
(gdb)
0 голосов
/ 27 января 2020

относительно:

gcc -std=c99 -g -o test test.c

Намного лучше включить предупреждения, а затем исправить эти предупреждения. Предложите:

gcc -std=c99 -ggdb3 -Wall -Wextra -Wconversion -pedantic -c test.c -o test.o

опции для gcc приведут к отображению нескольких проблем с кодом OP, которые необходимо исправить перед продолжением шага ссылки:

шаг ссылки:

gcc -std=c99 -ggdb3 test.o  -o test

Примечание: опция: -ggdb3 приведет к максимальному количеству отладочной информации в объектном файле: test.o и должна использоваться как на этапах компиляции, так и на ссылках

Обратите внимание на следующее утверждение:

printf("Hey");

, вероятно, не будет отображаться на терминале, пока программа не закроется. Это связано с тем, что выходной поток stdout буферизируется, и его необходимо «поощрять» для передачи данных на терминал. Простой способ сделать это - завершить строку формата с помощью '\ n'. IE

printf("Hey\n");

подходящий способ запуска GDB:

gdb test
br main
run
continue

в gdb:

нет необходимости указывать какой-либо «путь» (вы следует запустить gdb в том же каталоге, что и исходный код, объект и исполняемый файл), в противном случае вам нужно будет ввести еще несколько команд в gdb перед тем, как набрать: br main

команда: br main будет установить точку останова в начале функции main()

Команда: run будет запускать исполняемый файл до точки останова на main()

Команда: continue заставит остальную часть исполняемого файла работать до завершения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...