Я пытаюсь добавить точку останова в своем использовании программы
b {line number}
но я всегда получаю ошибку, которая говорит:
No symbol table is loaded. Use the "file" command.
Что мне делать?
Это немного поздно, и на вопрос, безусловно, был дан ответ. Тем не менее, если вы все еще открыты для предложений и еще не потратили свое время на преобразование указанного синтаксического анализатора с C # в JavaScript, я написал синтаксический анализатор (первоначально в PHP), который я преобразовал сам [2] в JavaScript. Он доступен по адресу bitbucket в соответствии с 3-ой лицензией BSD. Синтаксический анализатор кажется достаточно быстрым, но я не провел никакого анализа его скорости.
Он может быть не столь гибким в некоторых путях, как другие возможные проекты, но он позволяет определить ваши собственные коды («bb-код» или нет, с большим количеством свойств), а также содержится в одном файле. Это не простой синтаксический анализатор поиска и замены, он не основан на regex.
Если это представляет для вас какой-либо интерес, это может избавить вас от необходимости конвертировать другую библиотеку. Технически, я родственник «неизвестный,» но это замечательные вещи в JS/OSS: вы можете проверить источник, чтобы увидеть, что я сделал.
[2] В результате осталось несколько «функций совместимости», но я переписал вещи, которые имели доступные собственные эквиваленты.
-121--2980939- Другие уже решили проблему, но вместо использования printf («% c», c);
, вероятно, гораздо эффективнее использовать putchar (c);
. При запросе printf
напечатать только один символ возникает часть накладных расходов.
Краткое руководство по 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), чтобы получить список и описание всех допустимых команд.
Начните GDB с исполняемым файлом в качестве параметра, чтобы он знал, какую программу вы хотите отлавить:
gdb ./myprogram
, вы должны быть в состоянии установить точки останова. Например:
b myfile.cpp:25
b some_function
Убедитесь, что вы использовали опцию -g при компиляции.
Вам необходимо сказать GDB имя вашего исполняемого файла, либо при запуске GDB или с помощью команды файла:
$ gdb a.out
или
(gdb) file a.out