首先:我不擅长正则表达式。现在,这是在桌子上。我正在构建一个使用组和可选组件的正则表达式。我遇到的问题是,我需要在两个不同的区域匹配某个数字,并为它们提供相同的组名。这似乎不起作用。
所以具体细节。我正在分析来自 JVM 的垃圾收集日志。有问题的两行是完整的 GC 和常规的 GC。
我把它们分解成可读的。
全线:
229980.058: [Full GC 229980.058:
[CMS: 2796543K->2796543K(2796544K), **13.3050667** secs]
2983863K->2872464K(4067264K),
[CMS Perm : 325367K->325242K(1048576K)], 13.3054416 secs]
[Times: user=13.27 sys=0.03, real=13.31 secs]
Run Code Online (Sandbox Code Playgroud)
常规线路:
2.752: [GC 2.752:
[ParNew: 1143680K->4938K(1270720K), **0.0243534** secs]
1143686K->4945K(4067264K), 0.0245283 secs]
[Times: user=0.05 sys=0.02, real=0.03 secs]
Run Code Online (Sandbox Code Playgroud)
如您所见,Full GC 将 CMS/tenured generation 作为第一个字段区域。第二个没有这些,因为它只是常规收藏。
为了捕获这些,更正的是我已经将“CMS:”和“ParNew:”部分设为彼此可选。但是,我想将每个时间作为一个组名。(我把 ** 放在周围的值)
我正在使用这个正则表达式:
\d+.\d+: [(Full\s)?GC\s\d+.\d+: [(CMS:\s(?<JVM_TenuredGenHeapUsedBeforeGC>\d+)+K->(?<JVM_TenuredHeapUsedAfterGC>\d+)K( \d+K),\s(?<JVM_GCTimeTaken>\d+.\d+)\ssecs)? (ParNew:\s(?\d+)+K->(?<JVM_NewGenHeapUsedAfterGC>\d+)K((?<JVM_NewGenHeapSize>\d+)K),\s(?<JVM_GCTimeTaken>\d+.\d+)\ssecs )?] .. [为简洁起见编辑]
简而言之.. 是否可以在不同的可选匹配项上使用相同的组名?他们永远不会在同一条线上,所以我不知道为什么我不能拉这个。
用 regexr 测试这个似乎也失败了。谢谢!
我正在追逐内存分配的分段错误,所以我决定用valgrind运行我的应用程序.在一个意想不到的位置(但可能相关)我遇到了"无效写入大小8".但是,我没有看到代码有任何问题.我很欣赏另一种眼光.
我不确定要提供多少,所以这里有相关的功能.
43 static int sql_callback(void *sql_record, int argc, char **argv, char **azColName){
44 int i;
45 SQL_INFO *sql_info;
46 void *sql_temp;
47 sql_info = (SQL_INFO *)sql_record;
48
49
50 sql_info->num_cols=argc;
51
52 sql_info->sql_data=(SQL_DATA**)realloc(sql_info->sql_data,(sql_info->num_rows+1)*sizeof(SQL_DATA *));
53 sql_info->sql_data[sql_info->num_rows]=calloc(1,sizeof(SQL_DATA *));
54
55 sql_info->sql_data[sql_info->num_rows]->col_name=calloc(1,sizeof(*azColName)*argc);
56 sql_info->sql_data[sql_info->num_rows]->data=calloc(1,sizeof(*argv)*argc);
57
58 for(i=0; i<argc; i++){
59 sql_info->sql_data[sql_info->num_rows]->col_name[i]=strdup(azColName[i]);
60 sql_info->sql_data[sql_info->num_rows]->data[i]=strdup(argv[i]);
61 }
62 sql_info->num_rows++;
63 return 0;
64 }
Run Code Online (Sandbox Code Playgroud)
Valgrind有两个有趣的信息点:
==31925== Invalid write of size 8
==31925== at 0x405EC2: sql_callback (sql.c:56)
==31925== by 0x5310FF5: sqlite3_exec (in /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6)
==31925== …Run Code Online (Sandbox Code Playgroud)