sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    🫛 Lightbeans Update | Metallic and Roughness auto-applied in SketchUp 2025+ Download

    Trace() - display message with traceback to caller

    Scheduled Pinned Locked Moved Developers' Forum
    3 Posts 2 Posters 3.9k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Al HartA Offline
      Al Hart
      last edited by

      I use this routine trace() to display debug messages from ruby files.

      trace_sample.rb

      For instance, including:

      trace("Entities in model; %s", Sketchup.active_model.entities.length)
      

      in a ruby function, will display something like:

      Entities in model; 1
          ^^^trace_sample.rb;24;in `test_trace'
      

      Showing the ruby file name and line number where you placed the trace.

      trace(format, values) can be used like puts or printf(), but you do not need to add a \n to get the carriage return. (This saves me millions of keystrokes a month - not typing in \n 😉 )

      Try the attached file. When you type in: load "trace_sample.rb" you should see a message like:

      Entities in model; 1
          ^^^trace_sample.rb;24;in `test_trace'
      

      In actual use, I usually define trace() within each class or module, so that I am not creating a global function. (Which might interfere with, be be overridden by, global functions from other developers.

      e.g.

      
      class RPS_class
          def trace(*args)
             ... (rest of code)
          end#def
      end#class
      
      

      Here is the source for trace if you want to grab it and use it:
      (Or else get it from the attachment - which also includes a sample use of trace())

      
      def trace(*args)
      	scall = caller(1)[0].to_s # who called the routine	
      	scall2 = File;;basename(scall) # only the file name itself - no path	
      	begin
      		smess = sprintf(*args)	
      		puts smess + "\n    ^^^" + scall2	
      	rescue
      		warn "arg ERROR in trace called from; " + caller(1)[0].to_s
      	end		
      end#def
      
      

      Al Hart

      http:wiki.renderplus.comimageseefRender_plus_colored30x30%29.PNG
      IRender nXt from Render Plus

      1 Reply Last reply Reply Quote 0
      • thomthomT Offline
        thomthom
        last edited by

        👍 Good stuff.

        Though, I have a thought:
        Why not define the trace method in a Trace class, and then include the class to the methods you want. That way you don't have multiple copies all over the place?

        Thomas Thomassen — SketchUp Monkey & Coding addict
        List of my plugins and link to the CookieWare fund

        1 Reply Last reply Reply Quote 0
        • Al HartA Offline
          Al Hart
          last edited by

          @thomthom said:

          :thumb: Good stuff.

          Though, I have a thought:
          Why not define the trace method in a Trace class, and then include the class to the methods you want. That way you don't have multiple copies all over the place?

          Good idea, I could include it in a module of functions.

          But I would still have to distribute the trace module with each application.

          And there might be a problem with versions. When a user had installed more than one RPS application, say a new version of A and and old version of B, then A might wind up inheriting from the B version of the module, if the B version was loaded into SketchUp after the A version.

          At one point we considered having a common set - called RPS_common. But still the problems of installing and uninstalling became difficult.

          Al Hart

          http:wiki.renderplus.comimageseefRender_plus_colored30x30%29.PNG
          IRender nXt from Render Plus

          1 Reply Last reply Reply Quote 0
          • 1 / 1
          • First post
            Last post
          Buy SketchPlus
          Buy SUbD
          Buy WrapR
          Buy eBook
          Buy Modelur
          Buy Vertex Tools
          Buy SketchCuisine
          Buy FormFonts

          Advertisement