Как отладить использование gdb?

Я пытаюсь добавить точку останова в своем использовании программы

b {line number}

но я всегда получаю ошибку, которая говорит:

No symbol table is loaded.  Use the "file" command.

Что мне делать?

12
задан JooGuan 15 October 2014 в 06:07
поделиться

4 ответа

Это немного поздно, и на вопрос, безусловно, был дан ответ. Тем не менее, если вы все еще открыты для предложений и еще не потратили свое время на преобразование указанного синтаксического анализатора с C # в JavaScript, я написал синтаксический анализатор (первоначально в PHP), который я преобразовал сам [2] в JavaScript. Он доступен по адресу bitbucket в соответствии с 3-ой лицензией BSD. Синтаксический анализатор кажется достаточно быстрым, но я не провел никакого анализа его скорости.

Он может быть не столь гибким в некоторых путях, как другие возможные проекты, но он позволяет определить ваши собственные коды («bb-код» или нет, с большим количеством свойств), а также содержится в одном файле. Это не простой синтаксический анализатор поиска и замены, он не основан на regex.

Если это представляет для вас какой-либо интерес, это может избавить вас от необходимости конвертировать другую библиотеку. Технически, я родственник «неизвестный,» но это замечательные вещи в JS/OSS: вы можете проверить источник, чтобы увидеть, что я сделал.

[2] В результате осталось несколько «функций совместимости», но я переписал вещи, которые имели доступные собственные эквиваленты.

-121--2980939-

Другие уже решили проблему, но вместо использования printf («% c», c); , вероятно, гораздо эффективнее использовать putchar (c); . При запросе printf напечатать только один символ возникает часть накладных расходов.

-121--4213608-

Краткое руководство по gdb:

/* test.c  */
/* Sample program to debug.  */
#include <stdio.h>
#include <stdlib.h>

int
main (int argc, char **argv) 
{
  if (argc != 3)
    return 1;
  int a = atoi (argv[1]);
  int b = atoi (argv[2]);
  int c = a + b;
  printf ("%d\n", c);
  return 0;
}

Компиляция с параметром -g3 . g3 содержит дополнительную информацию, например, все макроопределения, представленные в программе.

gcc -g3 -o test test.c

Загрузите исполняемый файл, который теперь содержит отладочные символы, в gdb:

gdb --annotate=3 test.exe 

Теперь вы должны найти себя в приглашении gdb. Там можно выполнять команды для gdb. Скажите, что вы хотите разместить точку останова в строке 11 и пройти через выполнение, распечатав значения локальных переменных - следующие последовательности команд помогут вам сделать это:

(gdb) break test.c:11
Breakpoint 1 at 0x401329: file test.c, line 11.
(gdb) set args 10 20
(gdb) run
Starting program: c:\Documents and Settings\VMathew\Desktop/test.exe 10 20
[New thread 3824.0x8e8]

Breakpoint 1, main (argc=3, argv=0x3d5a90) at test.c:11
(gdb) n
(gdb) print a
$1 = 10
(gdb) n
(gdb) print b
$2 = 20
(gdb) n
(gdb) print c
$3 = 30
(gdb) c
Continuing.
30

Program exited normally.
(gdb) 

Короче говоря, для начала работы с gdb необходимы только следующие команды:

break file:lineno - sets a breakpoint in the file at lineno.
set args - sets the command line arguments.
run - executes the debugged program with the given command line arguments.
next (n) and step (s) - step program and step program until it 
                        reaches a different source line, respectively. 
print - prints a local variable
bt -  print backtrace of all stack frames
c - continue execution.

Введите help в подсказке (gdb), чтобы получить список и описание всех допустимых команд.

26
ответ дан 2 December 2019 в 03:43
поделиться

Начните GDB с исполняемым файлом в качестве параметра, чтобы он знал, какую программу вы хотите отлавить:

gdb ./myprogram

, вы должны быть в состоянии установить точки останова. Например:

b myfile.cpp:25
b some_function
6
ответ дан 2 December 2019 в 03:43
поделиться

Убедитесь, что вы использовали опцию -g при компиляции.

4
ответ дан 2 December 2019 в 03:43
поделиться
-

Вам необходимо сказать GDB имя вашего исполняемого файла, либо при запуске GDB или с помощью команды файла:

$ gdb a.out

или

(gdb) file a.out
3
ответ дан 2 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: