diff options
Diffstat (limited to 'docs/gettingstarted/developers/gdb_examples.rst')
-rw-r--r-- | docs/gettingstarted/developers/gdb_examples.rst | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/docs/gettingstarted/developers/gdb_examples.rst b/docs/gettingstarted/developers/gdb_examples.rst deleted file mode 100644 index 893987796cf..00000000000 --- a/docs/gettingstarted/developers/gdb_examples.rst +++ /dev/null @@ -1,141 +0,0 @@ -.. _gdb_examples: - -.. toctree:: - -GDB Examples -=============== - -In this section we have a few useful gdb commands. - -Starting GDB ----------------------------- - -Once at the gdb prompt, VPP can be started by running the following commands: - -.. code-block:: console - - (gdb) run -c /etc/vpp/startup.conf - Starting program: /scratch/vpp-master/build-root/install-vpp_debug-native/vpp/bin/vpp -c /etc/vpp/startup.conf - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". - vlib_plugin_early_init:361: plugin path /scratch/vpp-master/build-root/install-vpp_debug-native/vpp/lib/vpp_plugins:/scratch/vpp-master/build-root/install-vpp_debug-native/vpp/lib/vpp_plugins - .... - -Backtrace ----------------------------- - -If you encounter errors when running VPP, such as VPP terminating due to a segfault -or abort signal, then you can run the VPP debug binary and then execute **backtrace** or **bt**. - -.. code-block:: console - - (gdb) bt - #0 ip4_icmp_input (vm=0x7ffff7b89a40 <vlib_global_main>, node=0x7fffb6bb6900, frame=0x7fffb6725ac0) at /scratch/vpp-master/build-data/../src/vnet/ip/icmp4.c:187 - #1 0x00007ffff78da4be in dispatch_node (vm=0x7ffff7b89a40 <vlib_global_main>, node=0x7fffb6bb 6900, type=VLIB_NODE_TYPE_INTERNAL, dispatch_state=VLIB_NODE_STATE_POLLING, frame=0x7fffb6725ac0, last_time_stamp=10581236529 65565) at /scratch/vpp-master/build-data/../src/vlib/main.c:988 - #2 0x00007ffff78daa77 in dispatch_pending_node (vm=0x7ffff7b89a40 <vlib_global_main>, pending_frame_index=6, last_time_stamp=1058123652965565) at /scratch/vpp-master/build-data/../src/vlib/main.c:1138 - .... - -Get to the GDB prompt ---------------------------------------- - -When VPP is running, you can get to the command prompt by pressing **CTRL+C**. - -Breakpoints ---------------------------------------- - -When at the GDB prompt, set a breakpoint by running the commands below: - -.. code-block:: console - - (gdb) break ip4_icmp_input - Breakpoint 4 at 0x7ffff6b9c00b: file /scratch/vpp-master/build-data/../src/vnet/ip/icmp4.c, line 142. - -List the breakpoints already set: - -.. code-block:: console - - (gdb) i b - Num Type Disp Enb Address What - 1 breakpoint keep y 0x00007ffff6b9c00b in ip4_icmp_input at /scratch/vpp-master/build-data/../src/vnet/ip/icmp4.c:142 - breakpoint already hit 3 times - 2 breakpoint keep y 0x00007ffff6b9c00b in ip4_icmp_input at /scratch/vpp-master/build-data/../src/vnet/ip/icmp4.c:142 - 3 breakpoint keep y 0x00007ffff640f646 in tw_timer_expire_timers_internal_1t_3w_1024sl_ov - at /scratch/vpp-master/build-data/../src/vppinfra/tw_timer_template.c:775 - -Delete a breakpoint: - -.. code-block:: console - - (gdb) del 2 - (gdb) i b - Num Type Disp Enb Address What - 1 breakpoint keep y 0x00007ffff6b9c00b in ip4_icmp_input at /scratch/vpp-master/build-data/../src/vnet/ip/icmp4.c:142 - breakpoint already hit 3 times - 3 breakpoint keep y 0x00007ffff640f646 in tw_timer_expire_timers_internal_1t_3w_1024sl_ov - at /scratch/vpp-master/build-data/../src/vppinfra/tw_timer_template.c:775 - -Step/Next/List ---------------------------------------- - -Step through the code using (s)tep into, (n)ext, and list some lines before and after where you are with list. - -.. code-block:: console - - Thread 1 "vpp_main" hit Breakpoint 1, ip4_icmp_input (vm=0x7ffff7b89a40 <vlib_global_main>, node=0x7fffb6bb6900, frame=0x7fffb6709480) - at /scratch/jdenisco/vpp-master/build-data/../src/vnet/ip/icmp4.c:142 - 142 { - (gdb) n - 143 icmp4_main_t *im = &icmp4_main; - ( - (gdb) list - 202 vlib_put_next_frame (vm, node, next, n_left_to_next); - 203 } - 204 - 205 return frame->n_vectors; - 206 } - 207 - 208 /* *INDENT-OFF* */ - 209 VLIB_REGISTER_NODE (ip4_icmp_input_node,static) = { - 210 .function = ip4_icmp_input, - 211 .name = "ip4-icmp-input", - -Examining Data and packets ------------------------------------------------ - -To look at data and packets use e(x)amine or (p)rint. - - -For example in this code look at the ip packet: - -.. code-block:: console - - (gdb) p/x *ip0 - $3 = {{ip_version_and_header_length = 0x45, tos = 0x0, length = 0x5400, - fragment_id = 0x7049, flags_and_fragment_offset = 0x40, ttl = 0x40, protocol = 0x1, - checksum = 0x2ddd, {{src_address = {data = {0xa, 0x0, 0x0, 0x2}, - data_u32 = 0x200000a, as_u8 = {0xa, 0x0, 0x0, 0x2}, as_u16 = {0xa, 0x200}, - as_u32 = 0x200000a}, dst_address = {data = {0xa, 0x0, 0x0, 0xa}, data_u32 = 0xa00000a, - as_u8 = {0xa, 0x0, 0x0, 0xa}, as_u16 = {0xa, 0xa00}, as_u32 = 0xa00000a}}, - address_pair = {src = {data = {0xa, 0x0, 0x0, 0x2}, data_u32 = 0x200000a, - as_u8 = {0xa, 0x0, 0x0, 0x2}, as_u16 = {0xa, 0x200}, as_u32 = 0x200000a}, - dst = {data = {0xa, 0x0, 0x0, 0xa}, data_u32 = 0xa00000a, as_u8 = {0xa, 0x0, 0x0, 0xa}, - as_u16 = {0xa, 0xa00}, as_u32 = 0xa00000a}}}}, {checksum_data_64 = - {0x40704954000045, 0x200000a2ddd0140}, checksum_data_64_32 = {0xa00000a}}, - {checksum_data_32 = {0x54000045, 0x407049, 0x2ddd0140, 0x200000a, 0xa00000a}}} - -Then the icmp header - -.. code-block:: console - - (gdb) p/x *icmp0 - $4 = {type = 0x8, code = 0x0, checksum = 0xf148} - -Then look at the actual bytes: - -.. code-block:: console - - (gdb) x/50w ip0 - 0x7fde9953510e: 0x54000045 0x00407049 0x2ddd0140 0x0200000a - 0x7fde9953511e: 0x0a00000a 0xf1480008 0x03000554 0x5b6b2e8a - 0x7fde9953512e: 0x00000000 0x000ca99a 0x00000000 0x13121110 - 0x7fde9953513e: 0x17161514 0x1b1a1918 0x1f1e1d1c 0x23222120 |