Просмотр исходного кода

Limit string size (10K) to print on stack dumps and allow it to be overwritten at runtime

mingodad 9 лет назад
Родитель
Сommit
b454a30c39
1 измененных файлов с 8 добавлено и 1 удалено
  1. 8 1
      SquiLu/sqstdlib/sqstdaux.cpp

+ 8 - 1
SquiLu/sqstdlib/sqstdaux.cpp

@@ -14,6 +14,13 @@ void sqstd_printcallstack(HSQUIRRELVM v)
 		SQInteger level=1; //1 is to skip this function that is level 0
 		const SQChar *name=0;
 		SQInteger seq=0;
+		SQInteger max_str_size = 10 * 1024; //to not print long strings in stack trace
+		sq_pushliteral(v, _SC("__max_print_stack_str_size")); //can be overwritten at runtime
+		if(sq_getonroottable(v) == SQ_OK)
+        {
+            sq_getinteger(v, -1, &max_str_size);
+            sq_poptop(v); //remove the result
+        }
 		pf(v,_SC("\nCALLSTACK\n"));
 		while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si)))
 		{
@@ -50,7 +57,7 @@ void sqstd_printcallstack(HSQUIRRELVM v)
 					break;
 				case OT_STRING:
 					sq_getstring(v,-1,&s);
-					pf(v,_SC("[%s] 10k max \"%.10000s\"\n"),name,s);
+					pf(v,_SC("[%s] (%d max dump) \"%.*s\"\n"), name, max_str_size, max_str_size, s);
 					break;
 				case OT_TABLE:
 					pf(v,_SC("[%s] TABLE\n"),name);