bbdebug.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "bbdebug.h"
  2. namespace bbDB{
  3. bbDBFrame *frames;
  4. bbDBVar localsBuf[1024];
  5. bbDBVar *locals=localsBuf;
  6. int srcpos;
  7. bool stopper;
  8. void dumpStack(){
  9. bbDBVar *ev=locals;
  10. for( bbDBFrame *f=frames;f;f=f->succ ){
  11. printf( "%s\n",f->decl );
  12. for( bbDBVar *v=f->locals;v!=ev;++v ){
  13. char id[64],type[64],value[128];
  14. strcpy( id,v->ident().c_str() );
  15. strcpy( type,v->typeName().c_str() );
  16. strcpy( value,v->getValue().c_str() );
  17. printf( " %s:%s=%s\n",id,type,value );
  18. }
  19. ev=f->locals;
  20. }
  21. }
  22. void stop(){
  23. dumpStack();
  24. }
  25. void stopped(){
  26. dumpStack();
  27. stopper=false;
  28. }
  29. }
  30. bbString bbDBVar::ident()const{
  31. const char *p=strchr( decl,':' );
  32. return bbString( decl,p-decl );
  33. }
  34. bbString bbDBVar::typeName()const{
  35. const char *p=strchr( decl,':' )+1;
  36. return bbTypeName( p );
  37. }
  38. bbString bbDBVar::getValue()const{
  39. const char *p=strchr( decl,':' )+1;
  40. switch( *p ){
  41. case 'i':return bbString( *(int*)ptr );
  42. case 'f':return bbString( *(float*)ptr );
  43. case 's':return "\""+bbString( *(bbString*)ptr )+"\"";
  44. case 'A':return "[...]";
  45. }
  46. return "????";
  47. }