====== CPP debug ====== ===== Strace ===== strace ./program strace -f ./program <------ trace thread Output of strace shows attempt to load dynamic libraries and their results stat64("/vendor/lib/libstdc++.so", 0xbea97908) = -1 ENOENT (No such file or directory) stat64("/system/lib/libstdc++.so", {st_mode=S_IFREG|0777, st_size=4132, ...}) = 0 open("/system/lib/libstdc++.so", O_RDONLY) = 3 lseek(3, 0, SEEK_SET) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0�\5\0\0004\0\0\0"..., 4096) = 4096 lseek(3, -8, SEEK_END) = 4124 read(3, "nfoD2Ev\0", 8) = 8 mmap2(0x80100000, 36864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x80100000 mmap2(0x80100000, 1976, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x80100000 mprotect(0x80100000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC) = 0 mmap2(0x80108000, 2084, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x80108000 close(3) = 0 mprotect(0x80100000, 4096, PROT_READ|PROT_EXEC) = 0 getuid32() = 0 geteuid32() = 0 getgid32() = 0 getegid32() = 0 write(2, "reloc_library[1311]: 2626 canno"..., 61reloc_library[1311]: 2626 cannot locate '_ZNKSs5c_strEv'... ) = 61 write(2, "CANNOT LINK EXECUTABLE\n\0", 24CANNOT LINK EXECUTABLE ) = 24 SYS_248(0xffffffff, 0xfffffff4, 0xb0009498, 0x1, 0xffffffff Running program yields this error: '2626 cannot locate '_ZNKSs5c_strEv'...' with c++filt you can decode the symbol. # c++filt _ZNKSs5c_strEv c++filt decodes that symbol to std::basic_string, std::allocator >::c_str() const This function might not be available... To find the function inside the library: objdump -xxx binary ===== Compile libs with --enable-debug ===== Some libs have the option be compiled with Debug enabled. Check: ./configure --help Look for --enable-debug option. ===== GDB is must ===== Run program with GDB On host: gdb ./program run On remote with gdbserver. ===== See content of library ===== nm -C mymlib.a ar -vt /usr/lib/libnsl.a | head 5