Get the App
SLTechnology News&Howtos  ›  Servers  › 

Embedded development / debugging aids

Shulou Source: shulou.com Published: 2022-06-02 12:01:24 10月03日 Update

Composition of development environment for development aids

Typically, the development environment consists of three parts:

Build environment: including code writing, program compilation, version control and other functions.

Debugging environment: an auxiliary toolset for locating problems

Test environment: explicit and implicit requirements used to verify that the target program meets user requirements

In embedded development, 20% of the time is spent on target construction, and 80% of the time is spent on testing, debugging and bug repair. GNU provides an auxiliary tool set (Binutils) for the GCC compiler at http://www.gnu.org/software/binutils/

Development toolset addr2line

Converts the specified address to the corresponding file name and line number, which is often used to analyze and locate memory errors

Addr2line example: location 0 address access

# include int g_global = 0tint g_test = 1bter int* gallepointerextern void func (); int main (int argc, char * argv []) {printf ("& g_global =% p\ n", & g_global); printf (& g_test =% p\ n ", & g_test); printf (" & g_pointer =% p\ n ", & g_pointer); printf (" g_pointer =% p\ n ", g_pointer) Printf (& func =% p\ n ", & func); printf (" & main =% p\ n ", & main); func (); return 0;}

Sample code func.c

# include int* glosspointerposition void func () {* g_pointer = (int) "D.T.Software"; return;}

1. Enable the core dump option.

Ulimit-c unlimited

2. Run the program and generate a crashed core file

Execute the sequencing use case that causes the program to crash, and after execution we see the generated core file

3. Read the core file and get the value of the IP register (0x08048000)

Dmesg core

In the last few lines of the file, it reads as follows:

The address 0x08048000 here is the address of the ip register.

4. Use addr2line to locate lines of code

Addr2line 0x08048000-f-e test.out

Strip

Eliminate the debugging information in the hometown file and reduce the size of the target program.

Select a book to delete the debugging information before the program is released.

Too much debugging information may affect the execution efficiency of the program.

Strip test.out

Note:

Almost all debugging aids depend on the debugging information in the object file

The use of debugging information can quickly locate the problem.

Use-g to generate debugging information when compiling a program using gcc

When releasing the program, consider whether to use strip to eliminate debugging information.

Ar

Package the target file, ar crs libname.a x.o .o

Extract the target file, ar x libname.a

Nm

List identifiers (variables, function names) in the target file

The output consists of three parts: {address, segment, identifier}

Segment identification description

Objdump

Disassemble the object file and view the mapping from assembly to source code

Objdump-d func.o

Objdump-S func.o

View the detailed segment information in the target file

Objdump-h test.out

Output description:

Here we need to explain a concept:

First, there are three addresses: virtual memory address, load address, and run address.

When we execute the executable program a.out:

1. The operating system assigns a process to the program and naturally allocates memory (virtual memory) to it.

two。 Load each segment of a.out into memory (load address), which is based on the file off in the above objdump-h

3. Execute the executable program (running address).

Size

Gets all the segment sizes in the target file, size test.out

Strings

Get all string constants in the target file, string test.out

Tags: Files programs addresses targets information development tools memory environment location assistance code identification problems toolsets build compile run accessibility size Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno OPPO Reno macOS Shulou Tech Info Huawei Redmi