Skip to content

Commit 4143d6e

Browse files
Debugger
1 parent 2d7e82a commit 4143d6e

File tree

6 files changed

+132
-0
lines changed

6 files changed

+132
-0
lines changed

Error:Debugger/Debugger/heap.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const heapdump = require('heapdump');
2+
3+
heapdump.writeSnapshot(`${Date.now()}.heapsnapshot`);
4+
const array = [];
5+
6+
for (let i = 0; i < 1000, i++;) {
7+
array.push({
8+
index: i,
9+
buffer: Buffer.alloc(1024, i)
10+
})
11+
}
12+
console.log(process.pid);
13+
setTimeout(() => console.log('exit'), 100*1000);
14+

Error:Debugger/Debugger/index.js

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
const v8 = require('v8');
2+
3+
// 从 V8 版本、命令行标志、以及检测到的 CPU 特性派生的版本标记
4+
console.log(v8.cachedDataVersionTag());
5+
// 4151506697
6+
7+
// 获取 v8 堆空间的统计信息
8+
console.log(v8.getHeapSpaceStatistics());
9+
// [ { space_name: 'read_only_space',
10+
// space_size: 524288,
11+
// space_used_size: 35200,
12+
// space_available_size: 480384,
13+
// physical_space_size: 43904 },
14+
// { space_name: 'new_space',
15+
// space_size: 2097152,
16+
// space_used_size: 966784,
17+
// space_available_size: 64384,
18+
// physical_space_size: 2046080 },
19+
// { space_name: 'old_space',
20+
// space_size: 2330624,
21+
// space_used_size: 2154208,
22+
// space_available_size: 144,
23+
// physical_space_size: 2197728 },
24+
// { space_name: 'code_space',
25+
// space_size: 1048576,
26+
// space_used_size: 559968,
27+
// space_available_size: 0,
28+
// physical_space_size: 592736 },
29+
// { space_name: 'map_space',
30+
// space_size: 536576,
31+
// space_used_size: 349976,
32+
// space_available_size: 0,
33+
// physical_space_size: 367384 },
34+
// { space_name: 'large_object_space',
35+
// space_size: 0,
36+
// space_used_size: 0,
37+
// space_available_size: 1520180736,
38+
// physical_space_size: 0 } ]
39+
40+
41+
// 获取 v8 堆整体统计信息
42+
console.log(v8.getHeapStatistics());
43+
//{ total_heap_size: 7708672,
44+
// total_heap_size_executable: 3670016,
45+
// total_physical_size: 6046160,
46+
// total_available_size: 1492594096,
47+
// used_heap_size: 4353160,
48+
// heap_size_limit: 1501560832,
49+
// malloced_memory: 8192,
50+
// peak_malloced_memory: 1185552,
51+
// does_zap_garbage: 0 }
52+
53+
54+
// setFlagsFromString
55+
for (let i = 0; i < 100; i++) {
56+
const a = 1;
57+
setTimeout(() => console.log(a), 10);
58+
}
59+
60+
v8.setFlagsFromString('--trace_gc');
61+
setTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 10*1000);
62+

Error:Debugger/Debugger/package.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"dependencies": {
3+
"heapdump": "^0.3.14"
4+
}
5+
}

Error:Debugger/Debugger/prof-test.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
const array = [];
3+
4+
for (let i = 0; i < 1000, i++;) {
5+
array.push({
6+
index: i,
7+
buffer: Buffer.alloc(1024, i)
8+
})
9+
}
10+
11+
const end = Date.now() + 1000;
12+
while (Date.now() < end) {}

Error:Debugger/Debugger/script.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
global.a = 1;
2+
setTimeout(() => {
3+
debugger;
4+
console.log(global.a);
5+
}, 1000);
6+
console.log('hello world');

Error:Debugger/debugger.md

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
## Debugger
2+
3+
### node inspect script.js
4+
5+
1. 源代码中加入 debugger; 执行时会进入断点
6+
2. 使用命令调试
7+
* cont, c - 继续执行。
8+
* next, n - 下一步。
9+
* out, o - 步出。
10+
* pause - 暂停正在运行的代码(类似开发者工具中的暂停按钮)。
11+
3. 执行过程中动态设置断点
12+
* setBreakpoint(), sb() - 在当前行上设置断点。
13+
* setBreakpoint(line), sb(line) - 在特定行上设置断点。
14+
* setBreakpoint('fn()'), sb(...) - 在函数体的第一个语句上设置断点。
15+
* setBreakpoint('script.js', 1), sb(...) - 在 script.js 的第一行设置断点。
16+
* clearBreakpoint('script.js', 1), cb(...) - 清除 script.js 中第一行的断点。
17+
18+
### V8检查器集成
19+
1. node --inspect-brk script.js
20+
2. chrom: chrome://inspect/#devices
21+
22+
23+
### CPU profiling
24+
25+
1. node --prof script.js(当前目录生成 isolate-0xxxxxxx-v8.log )
26+
2. node --prof-process isolate-0xxxxxxx-v8.log > log.txt (处理 log 到 > log.txt 文件)
27+
28+
### heapdump
29+
30+
1. require('heapdump'), writeSnapshot
31+
2. kill -USR2 pid, 生成快照
32+
3. chrom: dev-tools -> memory -> load 快照
33+

0 commit comments

Comments
 (0)