Add developer documentation for WPA_TRACE
This commit is contained in:
parent
96603e4fe1
commit
3e82a2ed62
1 changed files with 72 additions and 1 deletions
|
@ -4,7 +4,8 @@
|
|||
[ \ref eapol_test "eapol_test" |
|
||||
\ref preauth_test "preauth_test" |
|
||||
\ref driver_test "driver_test" |
|
||||
\ref unit_tests "Unit tests" ]
|
||||
\ref unit_tests "Unit tests" |
|
||||
\ref wpa_trace "Tracing code" ]
|
||||
|
||||
%wpa_supplicant source tree includes number of testing and development
|
||||
tools that make it easier to test the programs without having to setup
|
||||
|
@ -289,4 +290,74 @@ make run-tests
|
|||
This make target builds and runs each test and terminates with zero
|
||||
exit code if all tests were completed successfully.
|
||||
|
||||
|
||||
\section wpa_trace Tracing code for developer debuggin
|
||||
|
||||
%wpa_supplicant and hostapd can be built with tracing code that will
|
||||
track and analyze memory allocations and other resource registrations
|
||||
and certain API uses. If incorrect use is detected, a backtrace of the
|
||||
call location (and/or allocation location) is shown. This can also be
|
||||
used to detect certain categories of memory leaks and report them
|
||||
automatically when the program is terminated. The report will also
|
||||
include information about forgotten eloop events.
|
||||
|
||||
The trace code can be enabled with CONFIG_WPA_TRACE=y build
|
||||
option. More verbose backtrace information can be generated if libbfd
|
||||
is available and the binaries are not stripped of symbol
|
||||
information. This is enabled with CONFIG_WPA_TRACE_BFD=y.
|
||||
|
||||
For example, a memory leak (forgotten os_free() call) would show up
|
||||
like this when the program is terminated:
|
||||
|
||||
\verbatim
|
||||
MEMLEAK[0x82d200]: len 128
|
||||
WPA_TRACE: memleak - START
|
||||
[0]: ./wpa_supplicant(os_malloc+0x59) [0x41a5e9]
|
||||
os_malloc() ../src/utils/os_unix.c:359
|
||||
[1]: ./wpa_supplicant(os_zalloc+0x16) [0x41a676]
|
||||
os_zalloc() ../src/utils/os_unix.c:418
|
||||
[2]: ./wpa_supplicant(wpa_supplicant_init+0x38) [0x48b508]
|
||||
wpa_supplicant_init() wpa_supplicant.c:2315
|
||||
[3]: ./wpa_supplicant(main+0x2f3) [0x491073]
|
||||
main() main.c:252
|
||||
WPA_TRACE: memleak - END
|
||||
MEMLEAK: total 128 bytes
|
||||
\endverbatim
|
||||
|
||||
Another type of error that can be detected is freeing of memory area
|
||||
that was registered for some use and is still be referenced:
|
||||
|
||||
\verbatim
|
||||
WPA_TRACE: Freeing referenced memory - START
|
||||
[2]: ./wpa_supplicant(os_free+0x5c) [0x41a53c]
|
||||
os_free() ../src/utils/os_unix.c:411
|
||||
[3]: ./wpa_supplicant(wpa_supplicant_remove_iface+0x30) [0x48b380]
|
||||
wpa_supplicant_remove_iface() wpa_supplicant.c:2259
|
||||
[4]: ./wpa_supplicant(wpa_supplicant_deinit+0x20) [0x48b3e0]
|
||||
wpa_supplicant_deinit() wpa_supplicant.c:2430
|
||||
[5]: ./wpa_supplicant(main+0x357) [0x4910d7]
|
||||
main() main.c:276
|
||||
WPA_TRACE: Freeing referenced memory - END
|
||||
WPA_TRACE: Reference registration - START
|
||||
[1]: ./wpa_supplicant [0x41c040]
|
||||
eloop_trace_sock_add_ref() ../src/utils/eloop.c:94
|
||||
[2]: ./wpa_supplicant(wpa_supplicant_ctrl_iface_deinit+0x17) [0x473247]
|
||||
wpa_supplicant_ctrl_iface_deinit() ctrl_iface_unix.c:436
|
||||
[3]: ./wpa_supplicant [0x48b21c]
|
||||
wpa_supplicant_cleanup() wpa_supplicant.c:378
|
||||
wpa_supplicant_deinit_iface() wpa_supplicant.c:2155
|
||||
[4]: ./wpa_supplicant(wpa_supplicant_remove_iface+0x30) [0x48b380]
|
||||
wpa_supplicant_remove_iface() wpa_supplicant.c:2259
|
||||
[5]: ./wpa_supplicant(wpa_supplicant_deinit+0x20) [0x48b3e0]
|
||||
wpa_supplicant_deinit() wpa_supplicant.c:2430
|
||||
[6]: ./wpa_supplicant(main+0x357) [0x4910d7]
|
||||
main() main.c:276
|
||||
WPA_TRACE: Reference registration - END
|
||||
Aborted
|
||||
\endverbatim
|
||||
|
||||
This type of error results in showing backtraces for both the location
|
||||
where the incorrect freeing happened and the location where the memory
|
||||
area was marked referenced.
|
||||
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue