Jsx707
s
8 if(argc <= 1) {
Andrii
$1 = 0
Такое впечатление, что ты r набрал без имени файла
Andrii
8 if(argc <= 1) {
p argc p argv[0] Это печать переченных
Jsx707
Такое впечатление, что ты r набрал без имени файла
(gdb) r test.txt Starting program: /home/ruslan/gl_learning/src/cobra_engine_script/lexer test.txt Breakpoint 1, main (argc=0, argv=0x7fffffffdd90) at lexer.c:7 7 int main(int argc, char *argv[]) { (gdb) p argc $1 = 0 (gdb) s 8 if(argc <= 1) { (gdb)
Andrii
s перейти на следующий оператор с заходом в функцию
Andrii
n перейти на следующий оператор не заходя в функцию
Andrii
s куда нас направило?
Jsx707
ну так написано же
Vladislav
ты сам настраивал или по тутору?
Jsx707
(gdb) s 8 if(argc <= 1) {
Jsx707
ты сам настраивал или по тутору?
и так и так , у меня не читался нормально .vimrc , не было структуры каталогов для vim , пришлось все самому создавть , перерыть кучу форумов
Jsx707
s
12 if(!strcmp(argv[1], "--version")) {
Jsx707
он в скрытом каталоге в папке home
Jsx707
но я дам текст конфига
Vladislav
(:
Jsx707
(:
call plug#begin('~/.vim/plugged') syntax enable set laststatus=2 if !has('gui_running') set t_Co=256 endif " Make sure you use single quotes Plug 'mattn/emmet-vim' " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align Plug 'junegunn/vim-easy-align' Plug 'itchyny/lightline.vim' Plug 'prettier/vim-prettier', { \ 'do': 'yarn install --frozen-lockfile --production', \ 'branch': 'release/0.x' \ } packloadall Plug 'prettier/vim-prettier', { \ 'do': 'yarn install --frozen-lockfile --production', \ 'for': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'graphql', 'markdown', 'vue', 'svelte', 'yaml', 'html'] } autocmd FileType javascript set formatprg=prettier\ --stdin " Any valid git URL is allowed Plug 'https://github.com/junegunn/vim-github-dashboard.git' " Multiple Plug commands can be written in a single line using | separators Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' " On-demand loading Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } Plug 'tpope/vim-fireplace', { 'for': 'clojure' } " Using a non-default branch Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) Plug 'fatih/vim-go', { 'tag': '*' } " Plugin options Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } " Plugin outside ~/.vim/plugged with post-update hook Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } " Unmanaged plugin (manually installed and updated) Plug '~/my-prototype-plugin' " Initialize plugin system call plug#end()
Andrii
Посмотри, чему равны, а потом s
Jsx707
p argc p argv[1]
(gdb) p argc $2 = 2 (gdb) p argv[1] $3 = 0x7fffffffe17e "test.txt" (gdb)
Jsx707
(gdb) s Done! [Inferior 1 (process 14539) exited normally] (gdb)
Andrii
После s куда попал?
Jsx707
судя по всему , он всем доволен
Andrii
(gdb) s Done! [Inferior 1 (process 14539) exited normally] (gdb)
Ты не много нажимал? Почему-то он не зашёл на вывод функции
Andrii
Попробуй ещё раз с r
Andrii
Ещё можно l для того, чтобы напечатать листинг
Jsx707
r и путь к файлу?
Andrii
Jsx707
For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from ./lexer... (gdb) b main Breakpoint 1 at 0x11e9: file lexer.c, line 7. (gdb) r test.txt Starting program: /home/ruslan/gl_learning/src/cobra_engine_script/lexer test.txt Breakpoint 1, main (argc=0, argv=0x7fffffffdd90) at lexer.c:7 7 int main(int argc, char *argv[]) { (gdb) p argc $1 = 0 (gdb) s 8 if(argc <= 1) { (gdb) s 12 if(!strcmp(argv[1], "--version")) { (gdb) p argc $2 = 2 (gdb) p argv[1] $3 = 0x7fffffffe17e "test.txt" (gdb) s Done! [Inferior 1 (process 14539) exited normally] (gdb) r это вся история если что
Jsx707
Starting program: /home/ruslan/gl_learning/src/cobra_engine_script/lexer test.txt Breakpoint 1, main (argc=0, argv=0x7fffffffdd90) at lexer.c:7 7 int main(int argc, char *argv[]) {
Andrii
l сделай, хочу исходник увидеть
Jsx707
#include <stdlib.h> 3 #include <string.h> 4 5 int analys(const char filename[]); 6 7 int main(int argc, char *argv[]) { 8 if(argc <= 1) { 9 printf("Options : --help or --filename for syntax analys\n"); 10 return 0; 11 }
Andrii
Ещё раз l
Jsx707
if(!strcmp(argv[1], "--version")) { 13 printf("Cobra Engine by sp1cklerboy!\nCurrent Version: 1.0 Beta\n"); 14 } else if(!strcmp(argv[1], "--source")) { 15 16 printf("https//github.com//sp1cklerboy/cobra-engine\n"); 17 } 18 else { 19 analys(argv[1]); 20 } 21 return 0;
Andrii
Ну вот, а теперь вопрос, почему он кончил выполнять программу?
Vladislav
call plug#begin('~/.vim/plugged') syntax enable set laststatus=2 if !has('gui_running') set t_Co=256 endif " Make sure you use single quotes Plug 'mattn/emmet-vim' " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align Plug 'junegunn/vim-easy-align' Plug 'itchyny/lightline.vim' Plug 'prettier/vim-prettier', { \ 'do': 'yarn install --frozen-lockfile --production', \ 'branch': 'release/0.x' \ } packloadall Plug 'prettier/vim-prettier', { \ 'do': 'yarn install --frozen-lockfile --production', \ 'for': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'graphql', 'markdown', 'vue', 'svelte', 'yaml', 'html'] } autocmd FileType javascript set formatprg=prettier\ --stdin " Any valid git URL is allowed Plug 'https://github.com/junegunn/vim-github-dashboard.git' " Multiple Plug commands can be written in a single line using | separators Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' " On-demand loading Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } Plug 'tpope/vim-fireplace', { 'for': 'clojure' } " Using a non-default branch Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) Plug 'fatih/vim-go', { 'tag': '*' } " Plugin options Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } " Plugin outside ~/.vim/plugged with post-update hook Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } " Unmanaged plugin (manually installed and updated) Plug '~/my-prototype-plugin' " Initialize plugin system call plug#end()
👍🏿
Andrii
s, снова s
Jsx707
Ну вот, а теперь вопрос, почему он кончил выполнять программу?
кто он? lexer? Ну он же передает управление функции analys , которая пока что только проверкой файла и занимается , затем он из нее выходит и возвращает 0
Anastasia
всем привет! очень простое задание и я его когда-нибудь пойму, но хотелось бы сегодня.
Jsx707
s, снова s
(gdb) s 8 if(argc <= 1) { (gdb) s 12 if(!strcmp(argv[1], "--version")) {
Andrii
Сейчас он на 12-й строке и должен перейти на 14-ю..
Anastasia
я ввела в идее, но разницу с ++х и х++ плохо понимаю в этом примере, объясните пожалуйста
Andrii
analys(argv[1])
Ты же в отладчике не наступал на эту строку... Значит не передаёт
Andrii
Снова s
Jsx707
[Inferior 1 (process 15496) exited normally] я так понял , это выход?
Andrii
Да,т. е. он сразу же после команды вывалился
Jsx707
а почему? что я не так написал?
Jsx707
все же вроде верно
Anastasia
я кажется поняла. спасибо
Andrii
Ну... значит попытайся написать ```int status = strcmp(argv[1], "--version"); if (status) { ...`
giorgio
я кажется поняла. спасибо
было бы легче, если бы мы понимали, что ты хотела спросить
Andrii
И поставь перед выходом return 0; какой-нить print
Andrii
Перекомпилируй и запусти снова отладчик
Anastasia
было бы легче, если бы мы понимали, что ты хотела спросить
хотела спросить почему там тру, но потом стало понятно
Vladislav
я ввела в идее, но разницу с ++х и х++ плохо понимаю в этом примере, объясните пожалуйста
Пост инкремент сначала возвращает старое значение, а потом увеличивает на единицу. А преинкремент сначала увеличивает на единицу и возвращает сразу новое значение
Jsx707
может тогда status = strcmp(argv[1])
Jsx707
и в if его проверять
Jsx707
или не катит
Andrii
может тогда status = strcmp(argv[1])
strcmp требует два параметра
Andrii
Поэтому мы заменяем if(!strcmp(argv[1], "--version")) { на int status = strcmp(argv[1], "--version"); if (!status) {
Jsx707
ага , понял
Andrii
И перекомпилировать не забыть
Jsx707
а мне для всх аргументов status переопределять?
Jsx707
ну отдельные переменные сделать можно ....
Jsx707
и их проверять
Andrii
Ну... чтобы было видно...
Andrii
Просто по логике причин такой ошибки может быть две
Andrii
(1) у тебя новый исходник и старая программа не актуальная (2) У тебя приво расставлены скобки и он сразу же вываливаетяся на конец программы по этому условию
Andrii
Ладно, я спать... С командами s, r, p, b ты разобрался, этого достаточно
Иван
вместе сыграем