Problems with Virtual sequence and pre_body of working sequence

The problem is:
i have a virtual sequence:

class credits_virtual_seq extends wlcc_virtual_base_sequence;

// Sequences libraries
    reg_check_credits_seq check_credits_seq;
    sys_request_sequence request_seq;


`uvm_object_utils_begin(credits_virtual_seq)
`uvm_object_utils_end
`uvm_declare_p_sequencer(wlcc_virtual_sequencer)

function new(string name = "credits_virtual_seq");
    super.new(name);
endfunction: new


virtual task body();
    `uvm_info(get_name(),"DEBUG: body of virtual sequence is starting", UVM_LOW)
    `uvm_do_on(request_seq, p_sequencer.sys_sequencer)
    `uvm_do_on(check_credits_seq, p_sequencer.reg_sequencer)
    `uvm_info(get_name(),"DEBUG: the end of the body of virtual sequence", UVM_LOW)
endtask: body

endclass: credits_virtual_seq

When request_seq is executing only body method is called (but not pre_body)

class sys_request_sequence extends wlcc_sys_base_sequence;

virtual task pre_body();
    $display("BRANCH");
    if(starting_phase != null) begin
        starting_phase.raise_objection(this, "starting sequence");
        if(scope_name == "") begin
            scope_name = get_full_name();
        end
    assert(uvm_config_db#(wlcc_credits)::get(null, scope_name, "credits", credits))
        else `uvm_fatal(get_name(), "No system credits available.")
    assert(uvm_config_db#(wlcc_sys_cfg)::get(null, scope_name, "sys_cfg", cfg))
        else `uvm_fatal(get_name(), "No system configuration available.")
    end

virtual task body();
    $display("BRANCH !");

(HERE ERROR BECAUSE WE DIDNT GET GFG)`uvm_info(get_name(),$sformatf(“The number of packets is %d \n”,cfg.num_pkts),UVM_LOW)
repeat(cfg.num_pkts) begin

VCS says:
… @ 1315000: uvm_test_top.wlcc_tb_env.wl0_virtual_sequencer@@credits_virtual_seq [credits_virtual_seq] DEBUG: body of virtual sequence is starting

BRANCH !

Error-[NOA] Null object access

The object is being used before it was constructed/allocated.
Please make sure that the object is newed before using it.

Why the pre_body method is not called?

The `uvm_do_on() macro doesn’t call pre_body().

If you use the sequence start(), method that will call pre_body(), followed by body(), followed by post_body()

i.e.

request_seq = sys_request_sequence::type_id::create(“request_seq”);
request_seq.start(p_sequencer.reg_sequencer);

In reply to mperyer:

Thank You, for your answer.