aboutsummaryrefslogtreecommitdiffstats
path: root/docs/afb-daemon-debugging.md
blob: 79a7d04328a8c29d1534152b7b0ea4d0c084b5b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Debugging binder and bindings

When compiled with the symbol AGL_DEVEL defined, the ***binder***
understands the 2 configuration variables:

 - AFB_DEBUG_BREAK: to emit interrupts
 - AFB_DEBUG_WAIT: to wait interrupts

To use these variables, assign it the list of break or wait points
to reach.

Example:

```bash
$ AFB_DEBUG_BREAK=main-entry AFB_DEBUG_WAIT=start-load,start-exec afb-daemon ....
```

This tells to ***afb-daemon*** to break at the point **main-entry** and to
wait at the points **start-load** and **start-exec**.

The items of the list can be separated using comma, space, tab or new-line.

The break/wait points are, in the order of their occurrence:

- main-entry: before decode arguments
- main-args: before daemon setup
- main-start: before starting jobs
- start-entry: before initialisation of sessions and hooks
- start-load: before load and pre-init of bindings
- start-start: before init of bindings
- start-http: before start of http server
- start-call: before execution of requests of the command line (option --call)
- start-exec: before execution of child preocees

Note also that a call to 'personality' is inserted just after
the point start-start.
or: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
/*
 * Copyright (C) 2017 "IoT.bzh"
 * Author: José Bollo <jose.bollo@iot.bzh>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*******************************************************************/
/* top */
body {
	position: fixed;
	top: 0px;
	left: 0px;
	right: 0px;
	bottom: 0px;
}

body.on #params, body.on #connect, body.off #disconnect { display: none; }

/*******************************************************************/
/* utilities */
.-flex-h {
	display: flex;
	flex-flow: row nowrap;
}
.-flex-v {
	display: flex;
	flex-flow: column nowrap;
}
.-flex-v > .-flex-fill {
	height: 100%;
}
.-flex-h > .-flex-fill {
	width: 100%;
}
.-box-out {
	position: relative;
}
.-box-in {
	position: absolute;
	left: 0px;
	right: 0px;
	top: 0px;
	bottom: 0px;
	overflow: auto;
}

/*******************************************************************/
/* head */
#head {
	position: relative;
}

#logo {
	float: left;
}

#connected {
	float: right;
}

/*******************************************************************/
/* connection area */

/*******************************************************************/
/* main area */

#controls, #menu { flex: 1; }
#middle { flex: 3; }
#controls { min-width: 300px; }
#menu { min-width: 200px; }

/*******************************************************************/
/* setting for apis */

/*******************************************************************/
/* setting of verbs */

/*******************************************************************/
/* setting for traces */

#apis .trace-evt {
	visibility: hidden;
	display: none;
}

/*******************************************************************/
/* tiny button */

/*******************************************************************/
/* display of logmsg */

#experts.closed ~ #expert-pane { visibility: hidden; }

/*******************************************************************/
/* close box */
.close {
	float: right;
}

/*******************************************************************/
/* open / close */
.opclo { float: right; } 
.api > .opclo { float: left; }

.closed > .closedoff { visibility: hidden; display: none; } 

.opened > .closedon { visibility: hidden; display: none; }

/*******************************************************************/
/* setting for traceevents */

.traceevent {
	position: relative;
}

.traceevent.closed {
	overflow: hidden;
}

.traceevent .time {
	float: right;
}

.traceevent.closed:hover {
	overflow: visible;
	z-index: 100;
	position: relative;
}

.traceevent.closed:not(:hover) .content {
	display: none;
}

.traceevent.closed:hover .content {
	display: block;
	background: inherit;
	overflow: hidden;
	left: 40%;
	max-width: 55%;
	position: absolute;
	animation-name: display-block;
	animation-duration: 2s;
	-webkit-animation-name: display-block;
	-webkit-animation-duration: 2s;
}

@-webkit-keyframes display-block {
	from { opacity: 0; }
	50% { opacity: 0; }
	to { opacity: 1; }
}

@keyframes display-block {
	from { opacity: 0; }
	50% { opacity: 0; }
	to { opacity: 1; }
}

.traceevent .content {
	clear: both;
}

.traceevent, .x-button {
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
}

.traceevent table.object tr td:nth-child(2) {
	-webkit-user-select: text;
	-moz-user-select: text;
	-ms-user-select: text;
	user-select: text;
}

/*******************************************************************/
/* json format */

/*******************************************************************/
/* clear fix */

.clearfix::after {
    content: "";
    clear: both;
    display: table;
}