И все это на машине с Kali (Debian). Очередная попытка установить софт "между делом" не прошла. Дело: смотрю видео (от Кантора) дабы освоить дебаггер, тупо устанавливаю node-inspector, а он сообщает мне, что не находит Chrome, действительно, нет на этой машине ни одного вебкита.
Между делом:Нахожу в инете мануал How to Install Google Chrome in Kali Linux, но оказывается, что дело это хлопотное... Спрашивается, зачем я это сделал? Думать было некогда!
DebuggerProtocol
How to Install Google Chrome in Kali Linux? – Part 3 – Running Chrome
Три приема c debugger:
1. Вставить в код debugger, запустить скрипт >node debug myscript.js
2. Запустить скрипт >node --debug-brk myscript.js - сразу в режиме отладки
3. >repl - вход в интерактивную консоль, все объекты там...
debugger Node.js v0.12.4 Manual & Documentation
Read-Eval-Print-Loop (REPL) - Read-Eval-Print-Loop (REPL) is available both as a standalone program and easily includable in other programs. The REPL provides a way to interactively run JavaScript and see the results. It can be used for debugging, testing, or just trying things out.
Как работать с debugger¶
Сначала входим в режим отладки (см выше... первый прием самый простой). Здесь работает все (как в Python), но посмотреть объекты нельзя. Поэтому в нужном месте входим в режим repl - это по сути интерактивная консоль, в которую передаются все объекты:
# дебаггер
debug> o
break in r1.js:18
16 }
17 });
18 });
debug> list(9)
9 $('a.title', '#siteTable').each(function(){
10 var url = this.href;
11 urls.push(url);
12 debugger;
13 });
14 console.log(urls.length);
15 console.log(urls);
16 }
17 });
18 });
debug> repl
Press Ctrl + C to leave debug repl
> 1+1
2
> request.
request.__defineGetter__ request.__defineSetter__
request.__lookupGetter__ request.__lookupSetter__
request.constructor request.hasOwnProperty
request.isPrototypeOf request.propertyIsEnumerable
request.toLocaleString request.toString
request.valueOf
request - это один из объектов, который был вызван при выполнении скрипта. После request. ннажимаем на клавишу Tab Также можно использовать вот такие необычные команды:
> .
.break .clear .exit .help .load .save
> .help
.break Sometimes you get stuck, this gets you out
.clear Break, and also clear the local context
.exit Exit the repl
.help Show repl options
.load Load JS from a file into the REPL session
.save Save all evaluated commands in this REPL session to a file
>
Далее можно не читать. Я здесь сохранил мои ошибочные действия - не надо было "хвататься" за установку второго более мощного дебаггера. Надо было сначала подумать. Ведь не бывает дебаггеров без доступа к Heap. А я последовал за автором видео...
Сначала попробуем встроеный дебаггер¶
В код надо вставить волшебное слово debugger; и в консоли при запуске надо вставить не менее волшебнос слово debug
kiss@kali:~/Desktop/scr$ node debug r1.js
< debugger listening on port 5858
connecting... ok
break in r1.js:1
1 var request = require('request'),
2 cheerio = require('cheerio'),
3 urls = [];
debug> help
Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), setBreakpoint (sb), clearBreakpoint (cb),
watch, unwatch, watchers, repl, restart, kill, list, scripts, breakOnException, breakpoints, version
debug> list
[Function]
debug> version
3.14.5.9
debug>
(^C again to quit)
debug>
kiss@kali:~/Desktop/scr$
При попытке найти подсказки (клавиша Tab) ничего не получилось, распечатать часть кода тоже не получилось... Так что пробуем поставить агрегат помощнее node-inspector. Процесс установки в приложении в конце поста.
node --debug-brk r1.js
debugger listening on port 5858
repl
help
GET / HTTP/1.1: (no value)
Host: 127.0.0.1:5858
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: OAID=3203b4266a1020a4c0fccff78568de90; OACBLOCK=2.1431012323; OACCAP=2
Connection: keep-alive
GET /favicon.ico HTTP/1.1: (no value)
Host: 127.0.0.1:5858
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: OAID=3203b4266a1020a4c0fccff78568de90; OACBLOCK=2.1431012323; OACCAP=2
Connection: keep-alive
GET /favicon.ico HTTP/1.1: (no value)
Host: 127.0.0.1:5858
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: OAID=3203b4266a1020a4c0fccff78568de90; OACBLOCK=2.1431012323; OACCAP=2
Connection: keep-alive
У меня скрипт не создает сервер, который слушает определенный порт, или выводит эхо-сообщения, как в видео, или, как в документации... Потому пока ограничусь первым знакомстовом с дебаггером.
Приложение Устновка дебаггера (от Гугла) node-inspector глобально¶
root@kali:/home/kiss# npm i -g node-inspector
> v8-profiler@5.2.9 preinstall /usr/local/lib/node_modules/node-inspector/node_modules/v8-profiler
>
> v8-debug@0.4.6 preinstall /usr/local/lib/node_modules/node-inspector/node_modules/v8-debug
>
npm WARN optional dep failed, continuing default-browser-id@1.0.2
> bufferutil@1.1.0 install /usr/local/lib/node_modules/node-inspector/node_modules/ws/node_modules/bufferutil
> node-gyp rebuild
make: Entering directory `/usr/local/lib/node_modules/node-inspector/node_modules/ws/node_modules/bufferutil/build'
CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
SOLINK_MODULE(target) Release/obj.target/bufferutil.node
SOLINK_MODULE(target) Release/obj.target/bufferutil.node: Finished
COPY Release/bufferutil.node
make: Leaving directory `/usr/local/lib/node_modules/node-inspector/node_modules/ws/node_modules/bufferutil/build'
> utf-8-validate@1.1.0 install /usr/local/lib/node_modules/node-inspector/node_modules/ws/node_modules/utf-8-validate
> node-gyp rebuild
make: Entering directory `/usr/local/lib/node_modules/node-inspector/node_modules/ws/node_modules/utf-8-validate/build'
CXX(target) Release/obj.target/validation/src/validation.o
SOLINK_MODULE(target) Release/obj.target/validation.node
SOLINK_MODULE(target) Release/obj.target/validation.node: Finished
COPY Release/validation.node
make: Leaving directory `/usr/local/lib/node_modules/node-inspector/node_modules/ws/node_modules/utf-8-validate/build'
> v8-profiler@5.2.9 install /usr/local/lib/node_modules/node-inspector/node_modules/v8-profiler
> node-pre-gyp install --fallback-to-build
make: Entering directory `/usr/local/lib/node_modules/node-inspector/node_modules/v8-profiler/build'
CXX(target) Release/obj.target/profiler/src/profiler.o
CXX(target) Release/obj.target/profiler/src/cpu_profiler.o
../src/cpu_profiler.cc: In static member function ‘static v8::Handle<v8::Value> nodex::CpuProfiler::StartProfiling(const v8::Arguments&)’:
../src/cpu_profiler.cc:32:10: warning: variable ‘recsamples’ set but not used [-Wunused-but-set-variable]
CXX(target) Release/obj.target/profiler/src/cpu_profile.o
CXX(target) Release/obj.target/profiler/src/cpu_profile_node.o
CXX(target) Release/obj.target/profiler/src/heap_profiler.o
CXX(target) Release/obj.target/profiler/src/heap_snapshot.o
CXX(target) Release/obj.target/profiler/src/heap_output_stream.o
CXX(target) Release/obj.target/profiler/src/heap_graph_node.o
CXX(target) Release/obj.target/profiler/src/heap_graph_edge.o
SOLINK_MODULE(target) Release/obj.target/profiler.node
SOLINK_MODULE(target) Release/obj.target/profiler.node: Finished
COPY Release/profiler.node
COPY /usr/local/lib/node_modules/node-inspector/node_modules/v8-profiler/build/profiler/v5.2.9/node-v11-linux-ia32/profiler.node
TOUCH Release/obj.target/action_after_build.stamp
make: Leaving directory `/usr/local/lib/node_modules/node-inspector/node_modules/v8-profiler/build'
> v8-debug@0.4.6 install /usr/local/lib/node_modules/node-inspector/node_modules/v8-debug
> node-pre-gyp install --fallback-to-build
make: Entering directory `/usr/local/lib/node_modules/node-inspector/node_modules/v8-debug/build'
CXX(target) Release/obj.target/debug/src/debug.o
../src/debug.cc: In static member function ‘static v8::Handle<v8::Value> nodex::Debug::InternalConstructorName(const v8::Arguments&)’:
../src/debug.cc:194:25: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
SOLINK_MODULE(target) Release/obj.target/debug.node
SOLINK_MODULE(target) Release/obj.target/debug.node: Finished
COPY Release/debug.node
COPY /usr/local/lib/node_modules/node-inspector/node_modules/v8-debug/build/debug/v0.4.6/node-v11-linux-ia32/debug.node
TOUCH Release/obj.target/action_after_build.stamp
make: Leaving directory `/usr/local/lib/node_modules/node-inspector/node_modules/v8-debug/build'
/usr/local/bin/node-inspector -> /usr/local/lib/node_modules/node-inspector/bin/inspector.js
/usr/local/bin/node-debug -> /usr/local/lib/node_modules/node-inspector/bin/node-debug.js
node-inspector@0.10.1 /usr/local/lib/node_modules/node-inspector
├── async@0.9.2
├── semver@4.3.4
├── debug@2.2.0 (ms@0.7.1)
├── rc@1.0.3 (strip-json-comments@0.1.3, deep-extend@0.2.11, ini@1.3.3, minimist@0.0.10)
├── strong-data-uri@1.0.0 (truncate@1.0.4)
├── serve-favicon@2.2.1 (fresh@0.2.4, ms@0.7.1, parseurl@1.3.0, etag@1.6.0)
├── glob@5.0.9 (path-is-absolute@1.0.0, inherits@2.0.1, once@1.3.2, inflight@1.0.4, minimatch@2.0.8)
├── yargs@3.9.1 (decamelize@1.0.0, camelcase@1.1.0, window-size@0.1.0, cliui@2.1.0)
├── which@1.1.1 (is-absolute@0.1.7)
├── express@4.12.4 (merge-descriptors@1.0.0, fresh@0.2.4, utils-merge@1.0.0, cookie-signature@1.0.6, methods@1.1.1, cookie@0.1.2, escape-html@1.0.1, range-parser@1.0.2, parseurl@1.3.0, content-type@1.0.1, finalhandler@0.3.6, vary@1.0.0, serve-static@1.9.3, content-disposition@0.5.0, path-to-regexp@0.1.3, depd@1.0.1, qs@2.4.2, on-finished@2.2.1, proxy-addr@1.0.8, etag@1.6.0, send@0.12.3, type-is@1.6.2, accepts@1.2.7)
├── biased-opener@0.2.5 (opener@1.4.1, minimist@1.1.0, x-default-browser@0.3.0, browser-launcher2@0.4.5)
├── ws@0.7.2 (options@0.0.6, ultron@1.0.1, bufferutil@1.1.0, utf-8-validate@1.1.0)
├── v8-profiler@5.2.9 (nan@1.8.4, node-pre-gyp@0.6.7)
└── v8-debug@0.4.6 (nan@1.8.4, node-pre-gyp@0.6.7)
root@kali:/home/kiss#
Посты чуть ниже также могут вас заинтересовать
После установки Chrome все работает (Kali).
ОтветитьУдалить1.набираем в консоли
node-inspector
2. Идем по указанному адресу
http://127.0.0.1:8080/debug?ws=127.0.0.1:8080&port=5858
и там прибамбасов... для полного счастья
А пере этим запускаем
Удалитьnode --debug r01.js
и код должен отразиться в дебаггере...
Да не тут-то было, все "включалось", но chrome не видел файл с кодом...
УдалитьНадо было использовать --debug-brk
node --debug-brk r01.js
node-inspector (в новой консоли)
http://127.0.0.1:8080/debug?ws=127.0.0.1:8080&port=5858
http://stackoverflow.com/questions/23340968/debugging-node-js-with-node-inspector
Try to run node --debug-brk app.js instead of just --debug. Your application may not be pausing before node inspector hooks into the node process. Using --debug-brk will force node to break on the first line of your app and wait for a debugger to attach to the process. Loading the node-inspector web interface is what causes node-inspector to attach to your node process; that's why you include the node debug port in the query string (localhost:8080/debug?port=5858). You're telling node-inspector what port it should reach out and attach to.