Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Eclipse Titan » Debugging using Titan Debugger(Debugging ttcn3/compiled C++ files using Titan debugger)
Debugging using Titan Debugger [message #1829998] Wed, 15 July 2020 13:43 Go to next message
Mujeeb Ur Rehman is currently offline Mujeeb Ur RehmanFriend
Messages: 16
Registered: January 2020
Junior Member
Hi,

After getting an executable of TTCN3 Test suite for protocol testing using Titan, Now I need to Debug the test cases which I am running. I am facing some issues which I would like to address and find a possible solution.

Now after getting an executable using the Debug configurations how I can hit breakpoints using Eclipse gdb debugger. I tried by attaching the process but my breakpoints which I added to C++ compiled files did not hit. In fact a cross sign was visible on the breakpoints. kindly guide me how i can walk over the compiled C++ code or TTCN3 code using the executable using Titan debug options.

One more question that when i run the test cases using simple run configuration then i can choose one test case and run it but in case of debugger option i was not able to do that? any solution for this?

Regards,
Mujeeb
Re: Debugging using Titan Debugger [message #1830000 is a reply to message #1829998] Wed, 15 July 2020 14:04 Go to previous messageGo to next message
Elemer Lelik is currently offline Elemer LelikFriend
Messages: 1120
Registered: January 2015
Senior Member
Hi Mujeeb,

you should not need to use the gdb; in majority of cases, the generated log (and possibly added log statements) will supply the user sufficient information
to continue. The log granularity can be controlled from the configuration file.

If you feel you need more, please check the built-in TTCN-3 debugger (see reference guide), that permits the user to add breakpoints,
print variables etc. (the usual debugger stuff) controlled both interactively and from a batch file. Examples are supplied in the reference guide.
Needless to say, debugger is command-line only.

We'd appreciate your feedback regarding the TTCN-3 debugger .


Best regards
Elemer





Re: Debugging using Titan Debugger [message #1830057 is a reply to message #1830000] Thu, 16 July 2020 13:05 Go to previous messageGo to next message
Mujeeb Ur Rehman is currently offline Mujeeb Ur RehmanFriend
Messages: 16
Registered: January 2020
Junior Member
Dear Elemer,

Thanks for the feedback.

1. well I also went through chapter 11 from Ref guide but I feel this requires some further explanation As a beginner for example I have compiled and now got an exe of the test cases then normally we start Main controller in one window and host controller in second window. then by using the smtc command execute the test case. Now can you please guide from this point on wards how i will start the debug process? as there are missing steps in ref guide.

2. Next question is that how we will going to step into code using the command line debugging?

3. please also guide me is there a way to debug using eclipse as this would be more user friendly? if yes please share guidance

Waiting for your kind feedback,

BR,
Mujeeb
Re: Debugging using Titan Debugger [message #1830069 is a reply to message #1830057] Thu, 16 July 2020 15:56 Go to previous messageGo to next message
Elemer Lelik is currently offline Elemer LelikFriend
Messages: 1120
Registered: January 2015
Senior Member
Hi Mujeeb,

as you might already know, a Titan executable can run in single mode (on one component only , that component being the MTC) , or in parallel mode (MTC plus a number of PTCs-parallel test components).

I will expand the example on the single mode execution that is offered in the referenceguide; this will be followed by an example for parallel execution, but that will take me some time.

So let's consider the piece of code in the example:

module demo {

type component CT {
  // component variables
  const integer ct_int := 4;
  var charstring ct_str := "abc";
}

type record Rec {
  integer num,
  charstring str
}

type record of integer IntList;

// global variable
template integer t_int := (1..10);

function f_fact(in integer n) return integer {
  if (n == 0 or n == 1) {
    return 1; // line 21
  }
  return n * f_fact(n - 1);
}

testcase tc_demo() runs on CT {
  // local variables
  var Rec v_rec := { num := ct_int, str := ct_str };
  var template IntList vt_list := { [0] := 1, [2] := * };

  if (match(f_fact(v_rec.num), t_int)) {
    v_rec.str := v_rec.str & "!";
  }
  else {
    v_rec.str := v_rec.str & "?";
  }

  var IntList v_list := { 1, 2, 9 };

  if (match(v_list, vt_list)) { // dynamic test case error, line 40
    action("matched");
  }
}

} // end of module


and generate a makefile to it:
makefilegen -sgn demo.ttcn


and also let's add a simple configuration file cfg.cfg as below:
[EXECUTE]
demo.tc_demo


After compiled with make a single mode executable demo will result.

If we run it with no parameters, it will tell us a bit more about itself:

 ./demo
TTCN-3 Test Executor (single mode), version CRL 113 200/7 R1B

usage: ./demo [-h] [-b file] configuration_file
   or  ./demo -l
   or  ./demo -p
   or  ./demo -v

OPTIONS:
	-b file:	run specified batch file at start (debugger must be activated)
	-h:		automatically halt execution at start (debugger must be activated)
	-l:		list startable test cases and control parts
	-p:		list module parameters
	-v:		show version and module information



namely that there are two options related to the debugger: -b and -h.

Option -h will let us run the executable interactively:

[/home/ethlel/Debug] -> ./demo -h cfg.cfg
TTCN-3 Test Executor (single mode), version CRL 113 200/7 R1B
Using configuration file: `cfg.cfg'
Test execution halted.
DEBUG> debug on
Debugger switched on.
DEBUG> dsetbp demo 21
Breakpoint added in module 'demo' at line 21 with no batch file.
DEBUG> dcont
Test execution resumed.
Test case tc_demo started.
User breakpoint reached at line 21 in module 'demo'.
Test execution halted.
DEBUG> dprintstack 
1.	[function]	f_fact([in] n := 1)*
2.	[function]	f_fact([in] n := 2)
3.	[function]	f_fact([in] n := 3)
4.	[function]	f_fact([in] n := 4)
5.	[testcase]	tc_demo()
DEBUG> dlistvar all
n t_int
DEBUG> dstacklevel 5
Stack level set to:
5.	[testcase]	tc_demo()
DEBUG> dlistvar comp
ct_int ct_str
DEBUG> dprintvar ct_int
[integer] ct_int := 4
DEBUG> dlistvar local
v_rec vt_list
DEBUG> dprintvar $
[Rec] v_rec := { num := 4, str := "abc" }
[IntList template] vt_list := { 1, <uninitialized template>, * }
DEBUG> dcont
Test execution resumed.
demo.ttcn:40: Dynamic test case error: Matching with an uninitialized/unsupported integer template.
Test case tc_demo finished. Verdict: error
Verdict statistics: 0 none (0.00 %), 0 pass (0.00 %), 0 inconc (0.00 %), 0 fail (0.00 %), 1 error (100.00 %).
Test execution summary: 1 test case was executed. Overall verdict: error


Please go through the above step by step; briefly this is what happens:
debug mode is switched on
a breakpoint is set on line 21
execution is continued until the breakpoint
some information is printed using commands
execution is continued until the end

Besides the interactive execution, debugging can also be controlled by batch files.

Let's create the below three batch files:
start1.bat:
debug on
dautobp error on error.bat
dsetbp demo 21 bp21.bat

(this switches the debug on; sets a breakpoint at line 21 at which bp21.bat will also be executed;in case of error error.bat will be executed)
bp21.bat:
dprintstack
dlistvar all
dstacklevel 5
dlistvar comp
dprintvar ct_int
dlistvar local
dprintvar $
dcont


(prints stuff, then continues execution)

error.bat:
dprintcalls
dlistvar local v_*
dprintvar $
dcont

(prints some other stuff , then continues execution)

these batch files have to reside in the same directory as ./demo and cfg.cfg.

Note:please mind that there is a typo in error.bat in the documentation:
in errror.bat dprintss has to be replaced with dprintcalls.

If demo is executed with the batch file start1.bat (and implicitly the referred error.bat and bp21.bat), the following happens:
./demo -b start1.bat cfg.cfg
TTCN-3 Test Executor (single mode), version CRL 113 200/7 R1B
Using configuration file: `cfg.cfg'
Test execution halted.
Executing batch file 'start1.bat'.
debug on
Debugger switched on.
dautobp error on error.bat
Automatic breakpoint at error verdict switched on with batch file 'error.bat'.
dsetbp demo 21 bp21.bat
Breakpoint added in module 'demo' at line 21 with batch file 'bp21.bat'.
Test execution resumed.
Test case tc_demo started.
User breakpoint reached at line 21 in module 'demo'.
Test execution halted.
Executing batch file 'bp21.bat'.
dprintstack
1.	[function]	f_fact([in] n := 1)*
2.	[function]	f_fact([in] n := 2)
3.	[function]	f_fact([in] n := 3)
4.	[function]	f_fact([in] n := 4)
5.	[testcase]	tc_demo()
dlistvar all
n t_int
dstacklevel 5
Stack level set to:
5.	[testcase]	tc_demo()
dlistvar comp
ct_int ct_str
dprintvar ct_int
[integer] ct_int := 4
dlistvar local
v_rec vt_list
dprintvar $
[Rec] v_rec := { num := 4, str := "abc" }
[IntList template] vt_list := { 1, <uninitialized template>, * }
dcont
Test execution resumed.
demo.ttcn:40: Dynamic test case error: Matching with an uninitialized/unsupported integer template.
Automatic breakpoint (error verdict) reached at line 40 in module 'demo'.
Test execution halted.
Executing batch file 'error.bat'.
dprintcalls
17:19:06.380067	[testcase]	started 	tc_demo()
17:19:06.380458	[function]	started 	f_fact([in] n := 4)
17:19:06.380482	[function]	started 	f_fact([in] n := 3)
17:19:06.380492	[function]	started 	f_fact([in] n := 2)
17:19:06.380502	[function]	started 	f_fact([in] n := 1)
17:19:06.382685	[function]	finished	f_fact([in] n := -) returned 1
17:19:06.382697	[function]	finished	f_fact([in] n := -) returned 2
17:19:06.382707	[function]	finished	f_fact([in] n := -) returned 6
17:19:06.382718	[function]	finished	f_fact([in] n := -) returned 24
dlistvar local v_*
v_rec v_list
dprintvar $
[Rec] v_rec := { num := 4, str := "abc?" }
[IntList] v_list := { 1, 2, 9 }
dcont
Test execution resumed.
Test case tc_demo finished. Verdict: error
Verdict statistics: 0 none (0.00 %), 0 pass (0.00 %), 0 inconc (0.00 %), 0 fail (0.00 %), 1 error (100.00 %).
Test execution summary: 1 test case was executed. Overall verdict: error



Basically the same thing as we did at the interactive execution, but this was controlled by batch files containing similar commands as in the interactive case.


So this should answer your first question and also the second , as interactive execution can be started with executable_name -h config_file.

As for your third question, no, currently there is no graphical support for the debugger, it is command line only.

As soon as I will assemble an example for parallel execution , I will continue.
In parallel mode the user communicates directly with the main controller;there
are special commands to manage parallel execution, e.g. address different components etc.

I hope this helps

Best regards
Elemer
Re: Debugging using Titan Debugger [message #1830074 is a reply to message #1830069] Thu, 16 July 2020 18:17 Go to previous messageGo to next message
Mujeeb Ur Rehman is currently offline Mujeeb Ur RehmanFriend
Messages: 16
Registered: January 2020
Junior Member
Thanks alot Elemer, I will follow the guidelines and will try to run and debug in single mode. Of course this will certainly help. I was previously compiling and executing in parallel mode. Thanks
BR,
Mujeeb
Re: Debugging using Titan Debugger [message #1830096 is a reply to message #1830074] Fri, 17 July 2020 09:09 Go to previous messageGo to next message
Elemer Lelik is currently offline Elemer LelikFriend
Messages: 1120
Registered: January 2015
Senior Member
Hi Mujeeb,

I'll continue now with the same example but compiled in parallel mode. Please notice that , although this is not a real parallel mode as there is only one component,
namely the MTC, the command interface changes as we are talking directly to the main controller.( In single mode, debug commands have been received and acted upon by the executable).

So first , we need to compile in parallel mode:
makefilegen  -gn demo.ttcn
make


The configuration file cfg.cfg is slightly changed to set a TCP port used for internal communication:
[EXECUTE]
demo.tc_demo

[MAIN_CONTROLLER]
TCPPort := 9034


First I will demonstrate the interactive usage in parallel mode.

Lets start the main controller in a console window:
mctr_cli cfg.cfg

*************************************************************************
* TTCN-3 Test Executor - Main Controller 2                              *
* Version: CRL 113 200/7 R1B                                            *
* Copyright (c) 2000-2020 Ericsson Telecom AB                           *
* All rights reserved. This program and the accompanying materials      *
* are made available under the terms of the Eclipse Public License v2.0 *
* which accompanies this distribution, and is available at              *
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html            *
*************************************************************************

Using configuration file: cfg.cfg
MC@esekilxxen1844: Unix server socket created successfully.
MC@esekilxxen1844: Listening on TCP port 9034.


In a separate console, let's start the executable:
./demo localhost 9034
TTCN-3 Host Controller (parallel mode), version CRL 113 200/7 R1B
The address of MC was set to a local IP address. This may cause incorrect behavior if a HC from a remote host also connects to MC.


Let's return now to the first console:

MC2> MC@esekilxxen1844: New HC connected from 127.0.0.1 [127.0.0.1]. esekilxxen1844: Linux 3.0.101-108.74-xen on x86_64.

MC2> 
MC2> cmtc
MC@esekilxxen1844: Downloading configuration file to all HCs.
HC@esekilxxen1844: Warning: The address of MC was set to a local IP address. This may cause incorrect behavior if a HC from a remote host also connects to MC.
MC@esekilxxen1844: Configuration file was processed on all HCs.
MC@esekilxxen1844: Creating MTC on host 127.0.0.1.
MC@esekilxxen1844: MTC is created.
MC2> debug on
MC2> MTC@esekilxxen1844: Debugger switched on.

MC2> dsetbp demo 21
MC2> MTC@esekilxxen1844: Breakpoint added in module 'demo' at line 21 with no batch file.

MC2> 
MC2> smtc
Executing all items of [EXECUTE] section.
MC2> MTC@esekilxxen1844: Test case tc_demo started.
MTC@esekilxxen1844: User breakpoint reached at line 21 in module 'demo'.
MTC@esekilxxen1844: Test execution halted.

MC2> dprintstack
MC2> MTC@esekilxxen1844: 
1.	[function]	f_fact([in] n := 1)*
2.	[function]	f_fact([in] n := 2)
3.	[function]	f_fact([in] n := 3)
4.	[function]	f_fact([in] n := 4)
5.	[testcase]	tc_demo()

MC2> dlistvar all
MC2> MTC@esekilxxen1844: 
n t_int

MC2> dstacklevel 5
MC2> MTC@esekilxxen1844: Stack level set to:
5.	[testcase]	tc_demo()

MC2> dlistvar comp
MC2> MTC@esekilxxen1844: 
ct_int ct_str

MC2> dprintvar ct_int
MC2> MTC@esekilxxen1844: 
[integer] ct_int := 4

MC2> dlistvar local
MC2> MTC@esekilxxen1844: 
v_rec vt_list

MC2> dprintvar $
MC2> MTC@esekilxxen1844: 
[Rec] v_rec := { num := 4, str := "abc" }
[IntList template] vt_list := { 1, <uninitialized template>, * }

MC2> dcont
MC2> MTC@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: demo.ttcn:40: Dynamic test case error: Matching with an uninitialized/unsupported integer template.
MTC@esekilxxen1844: Test case tc_demo finished. Verdict: error
MC@esekilxxen1844: Test execution finished.
Execution of [EXECUTE] section finished.

MC2> exit
MC@esekilxxen1844: Terminating MTC.
MTC@esekilxxen1844: Verdict statistics: 0 none (0.00 %), 0 pass (0.00 %), 0 inconc (0.00 %), 0 fail (0.00 %), 1 error (100.00 %).
MTC@esekilxxen1844: Test execution summary: 1 test case was executed. Overall verdict: error
MC@esekilxxen1844: MTC terminated.
MC@esekilxxen1844: Shutting down session.
MC@esekilxxen1844: Shutdown complete.



Here's what happens:
-first the main controller accepts the connection from the executable
-then an MTC is created by the user (cmtc)
-debug is set to on (debug on)
- a breakpoint is set on line 21 (dsetbp demo 21)
-the MTC is started, execution commences and it's stopped at line 21 (smtc)
-some information is printed interactively, then execution continues and finishes (dcont)
-the main controller is shut down (exit)


Besides the interactive mode, the batch file controlled mode can be used in parallel execution as well.

Let's start the main controller:


 mctr_cli cfg.cfg

*************************************************************************
* TTCN-3 Test Executor - Main Controller 2                              *
* Version: CRL 113 200/7 R1B                                            *
* Copyright (c) 2000-2020 Ericsson Telecom AB                           *
* All rights reserved. This program and the accompanying materials      *
* are made available under the terms of the Eclipse Public License v2.0 *
* which accompanies this distribution, and is available at              *
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html            *
*************************************************************************

Using configuration file: cfg.cfg
MC@esekilxxen1844: Unix server socket created successfully.
MC@esekilxxen1844: Listening on TCP port 9034.


Let's start the executable in a separate console:
./demo localhost 9034
TTCN-3 Host Controller (parallel mode), version CRL 113 200/7 R1B
The address of MC was set to a local IP address. This may cause incorrect behavior if a HC from a remote host also connects to MC.


and then run the debug session in the first console , controlled by start1.bat:
MC2> MC@esekilxxen1844: New HC connected from 127.0.0.1 [127.0.0.1]. esekilxxen1844: Linux 3.0.101-108.74-xen on x86_64.

MC2> cmtc
MC@esekilxxen1844: Downloading configuration file to all HCs.
HC@esekilxxen1844: Warning: The address of MC was set to a local IP address. This may cause incorrect behavior if a HC from a remote host also connects to MC.
MC@esekilxxen1844: Configuration file was processed on all HCs.
MC@esekilxxen1844: Creating MTC on host 127.0.0.1.
MC@esekilxxen1844: MTC is created.
MC2> batch start1.bat
Executing batch file 'start1.bat'.
debug on
dautobp error on error.bat
dsetbp demo 21 bp21.bat
MC2> MTC@esekilxxen1844: Debugger switched on.
MTC@esekilxxen1844: Automatic breakpoint at error verdict switched on with batch file 'error.bat'.
MTC@esekilxxen1844: Breakpoint added in module 'demo' at line 21 with batch file 'bp21.bat'.

MC2> smtc
Executing all items of [EXECUTE] section.
MC2> MTC@esekilxxen1844: Test case tc_demo started.
MTC@esekilxxen1844: User breakpoint reached at line 21 in module 'demo'.
MTC@esekilxxen1844: Test execution halted.
Executing batch file 'bp21.bat'.
dprintstack
dlistvar all
dstacklevel 5
dlistvar comp
dprintvar ct_int
dlistvar local
dprintvar $
dcont
MTC@esekilxxen1844: 
1.	[function]	f_fact([in] n := 1)*
2.	[function]	f_fact([in] n := 2)
3.	[function]	f_fact([in] n := 3)
4.	[function]	f_fact([in] n := 4)
5.	[testcase]	tc_demo()
MTC@esekilxxen1844: 
n t_int
MTC@esekilxxen1844: Stack level set to:
5.	[testcase]	tc_demo()
MTC@esekilxxen1844: 
ct_int ct_str
MTC@esekilxxen1844: 
[integer] ct_int := 4
MTC@esekilxxen1844: 
v_rec vt_list
MTC@esekilxxen1844: 
[Rec] v_rec := { num := 4, str := "abc" }
[IntList template] vt_list := { 1, <uninitialized template>, * }
MTC@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: demo.ttcn:40: Dynamic test case error: Matching with an uninitialized/unsupported integer template.
MTC@esekilxxen1844: Automatic breakpoint (error verdict) reached at line 40 in module 'demo'.
MTC@esekilxxen1844: Test execution halted.
Executing batch file 'error.bat'.
dprintcalls
dlistvar local v_*
dprintvar $
dcont
MTC@esekilxxen1844: 
10:34:00.422876	[testcase]	started 	tc_demo()
10:34:00.423222	[function]	started 	f_fact([in] n := 4)
10:34:00.423247	[function]	started 	f_fact([in] n := 3)
10:34:00.423258	[function]	started 	f_fact([in] n := 2)
10:34:00.423282	[function]	started 	f_fact([in] n := 1)
10:34:00.425431	[function]	finished	f_fact([in] n := -) returned 1
10:34:00.425444	[function]	finished	f_fact([in] n := -) returned 2
10:34:00.425454	[function]	finished	f_fact([in] n := -) returned 6
10:34:00.425464	[function]	finished	f_fact([in] n := -) returned 24
MTC@esekilxxen1844: 
v_rec v_list
MTC@esekilxxen1844: 
[Rec] v_rec := { num := 4, str := "abc?" }
[IntList] v_list := { 1, 2, 9 }
MTC@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: Test case tc_demo finished. Verdict: error
MC@esekilxxen1844: Test execution finished.
Execution of [EXECUTE] section finished.

MC2> exit
MC@esekilxxen1844: Terminating MTC.
MTC@esekilxxen1844: Verdict statistics: 0 none (0.00 %), 0 pass (0.00 %), 0 inconc (0.00 %), 0 fail (0.00 %), 1 error (100.00 %).
MTC@esekilxxen1844: Test execution summary: 1 test case was executed. Overall verdict: error
MC@esekilxxen1844: MTC terminated.
MC@esekilxxen1844: Shutting down session.
MC@esekilxxen1844: Shutdown complete.



So here's what happens:
-first the main controller accepts the connection from the executable
-then an MTC is created by the user (cmtc)
-batch file start1.bat is set (batch start1.bat)
-with smtc, the main controller is started, execution continues to line 21 , where bp21.bat is executed, then execution is recommenced; when encountering the error, error.bat is called, then execution is finished
-main controller is shut down (manually, with exit)


I might add a third part later, with a real parallel execution, with MTC and PTCs, but this will not add any great novelty; the command interface will be as exemplified here.

Best regards
Elemer

[Updated on: Fri, 17 July 2020 09:18]

Report message to a moderator

Re: Debugging using Titan Debugger [message #1830154 is a reply to message #1830096] Sat, 18 July 2020 09:59 Go to previous messageGo to next message
Elemer Lelik is currently offline Elemer LelikFriend
Messages: 1120
Registered: January 2015
Senior Member
I will continue with an exemple with two components, the MTC and a PTC.
In order for a PTC to be addressed directly , it has to be in an active state.


Here's the TTCN-3 code used:

module demo {

type port Control_PT message
{
  inout charstring
}with { extension "internal"}  

type component Main_CT {
  // component variables
  const integer ct_int := 4;
  var charstring ct_str := "abc";

  var Parallel_CT v_Parallel_CT:=null;
  port Control_PT      Ctlr_PCO;
}


type component Parallel_CT {
  // component variables
  const integer ct_int := 5;
  var charstring ct_str := "efg";
  port Control_PT      Ctlr_PCO;
}

type record Rec {
  integer num,
  charstring str
}

type record of integer IntList;

// global variable
template integer t_int := (1..10);

function f_fact(in integer n) runs on Main_CT return integer {
  if (n == 0 or n == 1) {
    return 1; // line 37
  }
  return n * f_fact(n - 1);
}

function f_index(in integer n) runs on Parallel_CT  return integer {
	alt {
	[]Ctlr_PCO.receive("go");
	}
      return ct_int + n;
  
}

testcase tc_demo() runs on Main_CT {

  v_Parallel_CT:=Parallel_CT.create("PTC_#3");
  connect(self:Ctlr_PCO, v_Parallel_CT:Ctlr_PCO)
  v_Parallel_CT.start(f_index(10));

  // local variables
  var Rec v_rec := { num := ct_int, str := ct_str };
  var template IntList vt_list := { [0] := 1, [2] := * };

  if (match(f_fact(v_rec.num), t_int)) {
    v_rec.str := v_rec.str & "!";
  }
  else {
    v_rec.str := v_rec.str & "?";
  }

  var IntList v_list := { 1, 2, 9 };

  if (match(v_list, vt_list)) { // dynamic test case error, line 69
    action("matched");
  }
  Ctlr_PCO.send("go");
}

} // end of module



The alt in the function running on the PTC is meant to avoid early termination of PTC and keep the PTC active:

function f_index(in integer n) runs on Parallel_CT  return integer {
	alt {
	[]Ctlr_PCO.receive("go");
	}
      return ct_int + n;
  
}


Let's generate the makefile and compile:
makefilegen -gn demo.ttcn
make


Configuration file used:
cfg.cfg
[EXECUTE]
demo.tc_demo

[MAIN_CONTROLLER]
TCPPort := 9034


In an error situation, error.bat will be invoked:
dprintcalls
dlistvar local v_*
dprintvar $
dcont


Let's start the main controller in the first console:
 mctr_cli cfg.cfg

*************************************************************************
* TTCN-3 Test Executor - Main Controller 2                              *
* Version: CRL 113 200/7 R1B                                            *
* Copyright (c) 2000-2020 Ericsson Telecom AB                           *
* All rights reserved. This program and the accompanying materials      *
* are made available under the terms of the Eclipse Public License v2.0 *
* which accompanies this distribution, and is available at              *
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html            *
*************************************************************************

Using configuration file: cfg.cfg
MC@esekilxxen1844: Unix server socket created successfully.
MC@esekilxxen1844: Listening on TCP port 9034.
MC2> MC@esekilxxen1844: New HC connected from 127.0.0.1 [127.0.0.1]. esekilxxen1844: Linux 3.0.101-108.74-xen on x86_64.


and the executable in the second:
./demo localhost 9034
TTCN-3 Host Controller (parallel mode), version CRL 113 200/7 R1B
The address of MC was set to a local IP address. This may cause incorrect behavior if a HC from a remote host also connects to MC.

then we can continue interactively in the first:
MC2> cmtc
MC@esekilxxen1844: Downloading configuration file to all HCs.
HC@esekilxxen1844: Warning: The address of MC was set to a local IP address. This may cause incorrect behavior if a HC from a remote host also connects to MC.
MC@esekilxxen1844: Configuration file was processed on all HCs.
MC@esekilxxen1844: Creating MTC on host 127.0.0.1.
MC@esekilxxen1844: MTC is created.
MC2> debug on
MC2> MTC@esekilxxen1844: Debugger switched on.

MC2> dautobp error on error.bat
MC2> MTC@esekilxxen1844: Automatic breakpoint at error verdict switched on with batch file 'error.bat'.

MC2> dsetbp demo 37
MC2> MTC@esekilxxen1844: Breakpoint added in module 'demo' at line 37 with no batch file.

MC2> dsettings
MC2> MTC@esekilxxen1844: 
Debugger is switched on.
Output is printed to the console.
Global batch file not set.
Function call data buffer size: infinite.
User breakpoints:
demo 37
Automatic breakpoints:
error on error.bat
fail off 

MC2> smtc
Executing all items of [EXECUTE] section.
MC2> MTC@esekilxxen1844: Test case tc_demo started.
MTC@esekilxxen1844: User breakpoint reached at line 37 in module 'demo'.
MTC@esekilxxen1844: Test execution halted.
PTC_#3(3)@esekilxxen1844: Test execution halted.

MC2> dlistcomp
MC@esekilxxen1844: MTC(1)* PTC_#3(3)
MC2> dlistvar all
MC2> MTC@esekilxxen1844: 
n t_int Ctlr_PCO ct_int ct_str v_Parallel_CT

MC2> dprintvar $
MC2> MTC@esekilxxen1844: 
[integer] n := 1
[integer template] demo.t_int := (1 .. 10)
[port] Ctlr_PCO := port Ctlr_PCO
[integer] ct_int := 4
[charstring] ct_str := "abc"
[component] v_Parallel_CT := PTC_#3(3)

MC2> dlistvar comp
MC2> MTC@esekilxxen1844: 
Ctlr_PCO ct_int ct_str v_Parallel_CT

MC2> dprintvar $
MC2> MTC@esekilxxen1844: 
[port] Ctlr_PCO := port Ctlr_PCO
[integer] ct_int := 4
[charstring] ct_str := "abc"
[component] v_Parallel_CT := PTC_#3(3)

MC2> dlistvar local
MC2> MTC@esekilxxen1844: 
n

MC2> dprintvar $
MC2> MTC@esekilxxen1844: 
[integer] n := 1

MC2> dsetcomp 3
MC@esekilxxen1844: Debugger set to print data from PTC PTC_#3(3).
MC2> dlistvar all
MC2> PTC_#3(3)@esekilxxen1844: 
n t_int Ctlr_PCO ct_int ct_str

MC2> dprintvar $
MC2> PTC_#3(3)@esekilxxen1844: 
[integer] n := 10
[integer template] demo.t_int := (1 .. 10)
[port] Ctlr_PCO := port Ctlr_PCO
[integer] ct_int := 5
[charstring] ct_str := "efg"

MC2> dlistvar comp
MC2> PTC_#3(3)@esekilxxen1844: 
Ctlr_PCO ct_int ct_str

MC2> dprintvar $
MC2> PTC_#3(3)@esekilxxen1844: 
[port] Ctlr_PCO := port Ctlr_PCO
[integer] ct_int := 5
[charstring] ct_str := "efg"

MC2> dlistvar local
MC2> PTC_#3(3)@esekilxxen1844: 
n

MC2> dprintvar $
MC2> PTC_#3(3)@esekilxxen1844: 
[integer] n := 10

MC2> dcont
MC2> MTC@esekilxxen1844: Test execution resumed.
PTC_#3(3)@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: demo.ttcn:69: Dynamic test case error: Matching with an uninitialized/unsupported integer template.
MTC@esekilxxen1844: Automatic breakpoint (error verdict) reached at line 69 in module 'demo'.
MTC@esekilxxen1844: Test execution halted.
Executing batch file 'error.bat'.
dprintcalls
dlistvar local v_*
dprintvar $
dcont
MTC@esekilxxen1844: 
11:38:25.101982	[testcase]	started 	tc_demo()
11:38:25.127104	[function]	started 	f_fact([in] n := 4)
11:38:25.127129	[function]	started 	f_fact([in] n := 3)
11:38:25.127140	[function]	started 	f_fact([in] n := 2)
11:38:25.127162	[function]	started 	f_fact([in] n := 1)
11:40:36.685118	[function]	finished	f_fact([in] n := -) returned 1
11:40:36.685134	[function]	finished	f_fact([in] n := -) returned 2
11:40:36.685145	[function]	finished	f_fact([in] n := -) returned 6
11:40:36.685156	[function]	finished	f_fact([in] n := -) returned 24
PTC_#3(3)@esekilxxen1844: Test execution halted.
PTC_#3(3)@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: 
v_rec v_list
MTC@esekilxxen1844: 
[Rec] v_rec := { num := 4, str := "abc?" }
[IntList] v_list := { 1, 2, 9 }
MTC@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: Test case tc_demo finished. Verdict: error
MC@esekilxxen1844: Test execution finished.
Execution of [EXECUTE] section finished.

MC2> exit
MC@esekilxxen1844: Terminating MTC.
MTC@esekilxxen1844: Verdict statistics: 0 none (0.00 %), 0 pass (0.00 %), 0 inconc (0.00 %), 0 fail (0.00 %), 1 error (100.00 %).
MTC@esekilxxen1844: Test execution summary: 1 test case was executed. Overall verdict: error
MC@esekilxxen1844: MTC terminated.
MC@esekilxxen1844: Shutting down session.
MC@esekilxxen1844: Shutdown complete.



Here's the summary of what happens:
-MTC is created (cmtc)
-debug set to on (debug on)
-error.bat file is activated for error situations(dautobp error on error.bat)
-breakpoint is set on line 37 (dsetbp demo 37)
-main settings are displayed (dsettings)
-execution is started (smtc)
-execution is halted at breakpoint
-components are listed (dlistcomp); we have MTC , active (marked with asterisk) , and PTC_#3; components
can be addressed by name (MTC, PTC_#3) or reference (1,3)
-variables (all, component and local) are listed and printed
-PTC set as active component
-again, variables (all, component and local) are listed and printed; compare the list of local variables
-execution is continued (dcont)
-when encountering an error, error.bat is executed, then test execution is finished
-MC is shut down (exit)



Best regards
Elemer

[Updated on: Sat, 18 July 2020 10:02]

Report message to a moderator

Re: Debugging using Titan Debugger [message #1830301 is a reply to message #1830154] Thu, 23 July 2020 05:44 Go to previous messageGo to next message
Mujeeb Ur Rehman is currently offline Mujeeb Ur RehmanFriend
Messages: 16
Registered: January 2020
Junior Member
Bundle of Thanks Elemer, I was able to debug a sample debug project with single mode but also executed Test application with parallel mode and was able to debug it. But there was one issue which I need to ask about.

1. Please guide me how we can add breakpoints in those functions which are called from the main ttcn file which we compile with titan. For example my main.ttcn file has imported some other module name test1.ttcn which contains a function which was called from the main.ttcn like test1_func(). I followed this command dsetbp <module> (<line> | <function>) [<batch file>] and added a function name. But The breakpoint did not hit in that function.
2. Please also tell me when the control is halt can we add further debug breakpoints during halt state?

Kindly guide me thanks.
Thanks & BR,Mujeeb
Re: Debugging using Titan Debugger [message #1830313 is a reply to message #1830301] Thu, 23 July 2020 08:41 Go to previous messageGo to next message
Elemer Lelik is currently offline Elemer LelikFriend
Messages: 1120
Registered: January 2015
Senior Member
Hi Mujeeb,

1. it's difficult to diagnose with this amount of info; maybe you just forgot to switch debug on?
Please bear in mind also that the function has to contain executable code.

Here's an example:

I split the code into two modules, demo and subdemo:

module demo {

import from subdemo all;




type record Rec {
  integer num,
  charstring str
}

type record of integer IntList;

// global variable
template integer t_int := (1..10);


testcase tc_demo() runs on Main_CT {

  v_Parallel_CT:=Parallel_CT.create("PTC_#3");
  connect(self:Ctlr_PCO, v_Parallel_CT:Ctlr_PCO)
  v_Parallel_CT.start(f_index(10));

  // local variables
  var Rec v_rec := { num := ct_int, str := ct_str };
  var template IntList vt_list := { [0] := 1, [2] := * };

  if (match(f_fact(v_rec.num), t_int)) {
    v_rec.str := v_rec.str & "!";
  }
  else {
    v_rec.str := v_rec.str & "?";
  }

  var IntList v_list := { 1, 2, 9 };

  if (match(v_list, vt_list)) { // dynamic test case error, line 69
    action("matched");
  }
  Ctlr_PCO.send("go");
}

} // end of module

module subdemo

{


type port Control_PT message
{
  inout charstring
}with { extension "internal"}  

type component Main_CT {
  // component variables
  const integer ct_int := 4;
  var charstring ct_str := "abc";

  var Parallel_CT v_Parallel_CT:=null;
  port Control_PT      Ctlr_PCO;
}


type component Parallel_CT {
  // component variables
  const integer ct_int := 5;
  var charstring ct_str := "efg";
  port Control_PT      Ctlr_PCO;
}

function f_fact(in integer n) runs on Main_CT return integer {
  if (n == 0 or n == 1) {
    return 1; 
  }
  return n * f_fact(n - 1);
}

function f_index(in integer n) runs on Parallel_CT  return integer {
	alt {
	[]Ctlr_PCO.receive("go");
	}
      return ct_int + n;
  
}

}



and the debug session went on as below:
mctr_cli cfg.cfg

*************************************************************************
* TTCN-3 Test Executor - Main Controller 2                              *
* Version: CRL 113 200/7 R1B                                            *
* Copyright (c) 2000-2020 Ericsson Telecom AB                           *
* All rights reserved. This program and the accompanying materials      *
* are made available under the terms of the Eclipse Public License v2.0 *
* which accompanies this distribution, and is available at              *
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html            *
*************************************************************************

Using configuration file: cfg.cfg
MC@esekilxxen1844: Unix server socket created successfully.
MC@esekilxxen1844: Listening on TCP port 9034.
MC2> MC@esekilxxen1844: New HC connected from 127.0.0.1 [127.0.0.1]. esekilxxen1844: Linux 3.0.101-108.74-xen on x86_64.

MC2> cmtc
MC@esekilxxen1844: Downloading configuration file to all HCs.
HC@esekilxxen1844: Warning: The address of MC was set to a local IP address. This may cause incorrect behavior if a HC from a remote host also connects to MC.
MC@esekilxxen1844: Configuration file was processed on all HCs.
MC@esekilxxen1844: Creating MTC on host 127.0.0.1.
MC@esekilxxen1844: MTC is created.
MC2> 
MC2> 
MC2> debug on
MC2> MTC@esekilxxen1844: Debugger switched on.

MC2> 
MC2> dsetbp subdemo f_fact f_fact.bat
MC2> MTC@esekilxxen1844: Breakpoint added in module 'subdemo' at function 'f_fact' with batch file 'f_fact.bat'.

MC2> smtc
Executing all items of [EXECUTE] section.
MC2> MTC@esekilxxen1844: Test case tc_demo started.
MTC@esekilxxen1844: User breakpoint reached at line 29 in module 'subdemo'.
MTC@esekilxxen1844: Test execution halted.
Executing batch file 'f_fact.bat'.
dprintstack
dlistvar all
dstacklevel 5
dlistvar comp
dprintvar ct_int
dlistvar local
dprintvar $
dcont
PTC_#3(3)@esekilxxen1844: Test execution halted.
PTC_#3(3)@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: 
1.	[function]	f_fact([in] n := 4)*
2.	[testcase]	tc_demo()
MTC@esekilxxen1844: 
n Ctlr_PCO ct_int ct_str v_Parallel_CT
MTC@esekilxxen1844: Invalid new stack level. Expected 1 - 2.
MTC@esekilxxen1844: 
Ctlr_PCO ct_int ct_str v_Parallel_CT
MTC@esekilxxen1844: 
[integer] ct_int := 4
MTC@esekilxxen1844: 
n
MTC@esekilxxen1844: 
[integer] n := 4
MTC@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: User breakpoint reached at line 29 in module 'subdemo'.
MTC@esekilxxen1844: Test execution halted.
Executing batch file 'f_fact.bat'.
dprintstack
dlistvar all
dstacklevel 5
dlistvar comp
dprintvar ct_int
dlistvar local
dprintvar $
dcont
PTC_#3(3)@esekilxxen1844: Test execution halted.
PTC_#3(3)@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: 
1.	[function]	f_fact([in] n := 3)*
2.	[function]	f_fact([in] n := 4)
3.	[testcase]	tc_demo()
MTC@esekilxxen1844: 
n Ctlr_PCO ct_int ct_str v_Parallel_CT
MTC@esekilxxen1844: Invalid new stack level. Expected 1 - 3.
MTC@esekilxxen1844: 
Ctlr_PCO ct_int ct_str v_Parallel_CT
MTC@esekilxxen1844: 
[integer] ct_int := 4
MTC@esekilxxen1844: 
n
MTC@esekilxxen1844: 
[integer] n := 3
MTC@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: User breakpoint reached at line 29 in module 'subdemo'.
MTC@esekilxxen1844: Test execution halted.
Executing batch file 'f_fact.bat'.
dprintstack
dlistvar all
dstacklevel 5
dlistvar comp
dprintvar ct_int
dlistvar local
dprintvar $
dcont
PTC_#3(3)@esekilxxen1844: Test execution halted.
PTC_#3(3)@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: 
1.	[function]	f_fact([in] n := 2)*
2.	[function]	f_fact([in] n := 3)
3.	[function]	f_fact([in] n := 4)
4.	[testcase]	tc_demo()
MTC@esekilxxen1844: 
n Ctlr_PCO ct_int ct_str v_Parallel_CT
MTC@esekilxxen1844: Invalid new stack level. Expected 1 - 4.
MTC@esekilxxen1844: 
Ctlr_PCO ct_int ct_str v_Parallel_CT
MTC@esekilxxen1844: 
[integer] ct_int := 4
MTC@esekilxxen1844: 
n
MTC@esekilxxen1844: 
[integer] n := 2
MTC@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: User breakpoint reached at line 29 in module 'subdemo'.
MTC@esekilxxen1844: Test execution halted.
Executing batch file 'f_fact.bat'.
dprintstack
dlistvar all
dstacklevel 5
dlistvar comp
dprintvar ct_int
dlistvar local
dprintvar $
dcont
PTC_#3(3)@esekilxxen1844: Test execution halted.
PTC_#3(3)@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: 
1.	[function]	f_fact([in] n := 1)*
2.	[function]	f_fact([in] n := 2)
3.	[function]	f_fact([in] n := 3)
4.	[function]	f_fact([in] n := 4)
5.	[testcase]	tc_demo()
MTC@esekilxxen1844: 
n Ctlr_PCO ct_int ct_str v_Parallel_CT
MTC@esekilxxen1844: Stack level set to:
5.	[testcase]	tc_demo()
MTC@esekilxxen1844: 
Ctlr_PCO ct_int ct_str v_Parallel_CT
MTC@esekilxxen1844: 
[integer] ct_int := 4
MTC@esekilxxen1844: 
v_rec vt_list
MTC@esekilxxen1844: 
[Rec] v_rec := { num := 4, str := "abc" }
[IntList template] vt_list := { 1, <uninitialized template>, * }
MTC@esekilxxen1844: Test execution resumed.
MTC@esekilxxen1844: demo.ttcn:38: Dynamic test case error: Matching with an uninitialized/unsupported integer template.
MTC@esekilxxen1844: Test case tc_demo finished. Verdict: error
MC@esekilxxen1844: Test execution finished.
Execution of [EXECUTE] section finished.

MC2> exit
MC@esekilxxen1844: Terminating MTC.
MTC@esekilxxen1844: Verdict statistics: 0 none (0.00 %), 0 pass (0.00 %), 0 inconc (0.00 %), 0 fail (0.00 %), 1 error (100.00 %).
MTC@esekilxxen1844: Test execution summary: 1 test case was executed. Overall verdict: error
MC@esekilxxen1844: MTC terminated.
MC@esekilxxen1844: Shutting down session.
MC@esekilxxen1844: Shutdown complete.





Please observe that the batch file was executed at every call of the function f_fact.

2. Yes , that is possible.


I hope this helps


Best regards
Elemer
Re: Debugging using Titan Debugger [message #1830327 is a reply to message #1830313] Thu, 23 July 2020 12:24 Go to previous message
Mujeeb Ur Rehman is currently offline Mujeeb Ur RehmanFriend
Messages: 16
Registered: January 2020
Junior Member
Thanks Elemer, this worked out and now I can easily halt the program in other modules also.
Previous Topic:decvalue for RFC4826 XML fails
Next Topic:Translation ports vs dual-faced ports part1
Goto Forum:
  


Current Time: Wed Jun 23 14:28:30 GMT 2021

Powered by FUDForum. Page generated in 0.02681 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top