linux下nm,objdump和ldd三大工具使用

news2025/6/28 6:38:16

       linux下进行C/C++开发时经常需要使用nm,objdump,ldd工具来分析定位问题,本篇文章就对其做个总结:

1.测试程序

TestSo.h

#pragma once
#include <iostream>

extern "C" int CTypeAdd(int x, int y);
extern "C" int CTypeSub(int x, int y);

int TestAdd(const int &a, const int &b);
int TestSub(const int &a, const int &b);

class TestClass {
public:
    TestClass();
    ~TestClass();
    int getIvalue();
    std::string getSvalue();
    void showValue();

private:
    int m_iValue;
    std::string m_sValue;
};

TestSo.cpp

#include "TestSo.h"

int CTypeAdd(int x, int y) {
    return x + y;
}

int CTypeSub(int x, int y) {
    return x - y;
}

int TestAdd(const int &a, const int &b) {
    return a + b;
}

int TestSub(const int &a, const int &b) {
    return a - b;
}

TestClass::TestClass() {
        m_iValue = 110;
        m_sValue = "My Test So";
}

TestClass::~TestClass() {

}

int TestClass::getIvalue() {
    return m_iValue;
}

std::string TestClass::getSvalue() {
    return m_sValue;
}

void TestClass::showValue() {
    std::cout << m_sValue.c_str() << "  " << m_iValue << std::endl;
}

main.cpp

#include <iostream>
#include "TestSo.h"

using namespace std;

int main() {
    std::cout << "start main ..." << std::endl;
    std::cout << "========== C type call ==========" << std::endl;
    std::cout << CTypeAdd(1, 2) << "  " << CTypeSub(1, 2) << std::endl;
    std::cout << "========== C++ type call ==========" << std::endl;
    std::cout << TestAdd(111, 222) << "  " << TestSub(111, 222) << std::endl;
    TestClass test;
    test.showValue();
    std::cout << test.getIvalue() << " " << test.getSvalue() << std::endl;

    return 0;
}

生成so动态库:
g++ -std=c++11 -g TestSo.cpp -fPIC -shared -o libTestSo.so

生成可执行程序:

g++ -std=c++11 main.cpp -L. -lTestSo -o main

程序运行结果如下:

 export LD_LIBRARY_PATH=.

./main

 

程序目录结构如下:

 

2.objdump


       objdump是一个gcc工具, 可以查看目标文件或者可执行文件的各个段信息。可以显示有关文件的大量不同信息。 objdump也可以显示符号,并且在联机帮助页中明确指出“这与nm程序提供的信息类似,但显示格式不同”
常用命令:objdump -tT libTestSo.so

objdump -tT libTestSo.so 显示如下:

libTestSo.so:     file format elf64-x86-64

SYMBOL TABLE:
00000000000001c8 l    d  .note.gnu.build-id     0000000000000000              .note.gnu.build-id
00000000000001f0 l    d  .gnu.hash      0000000000000000              .gnu.hash
0000000000000260 l    d  .dynsym        0000000000000000              .dynsym
00000000000005c0 l    d  .dynstr        0000000000000000              .dynstr
0000000000000992 l    d  .gnu.version   0000000000000000              .gnu.version
00000000000009e0 l    d  .gnu.version_r 0000000000000000              .gnu.version_r
0000000000000a60 l    d  .rela.dyn      0000000000000000              .rela.dyn
0000000000000b80 l    d  .rela.plt      0000000000000000              .rela.plt
0000000000000c88 l    d  .init  0000000000000000              .init
0000000000000ca0 l    d  .plt   0000000000000000              .plt
0000000000000d60 l    d  .plt.got       0000000000000000              .plt.got
0000000000000d70 l    d  .text  0000000000000000              .text
0000000000001034 l    d  .fini  0000000000000000              .fini
000000000000103d l    d  .rodata        0000000000000000              .rodata
000000000000104c l    d  .eh_frame_hdr  0000000000000000              .eh_frame_hdr
00000000000010c0 l    d  .eh_frame      0000000000000000              .eh_frame
00000000000012a4 l    d  .gcc_except_table      0000000000000000              .gcc_except_table
0000000000201dd0 l    d  .init_array    0000000000000000              .init_array
0000000000201de0 l    d  .fini_array    0000000000000000              .fini_array
0000000000201de8 l    d  .dynamic       0000000000000000              .dynamic
0000000000201fc8 l    d  .got   0000000000000000              .got
0000000000202000 l    d  .got.plt       0000000000000000              .got.plt
0000000000202070 l    d  .data  0000000000000000              .data
0000000000202080 l    d  .bss   0000000000000000              .bss
0000000000000000 l    d  .comment       0000000000000000              .comment
0000000000000000 l    d  .debug_aranges 0000000000000000              .debug_aranges
0000000000000000 l    d  .debug_info    0000000000000000              .debug_info
0000000000000000 l    d  .debug_abbrev  0000000000000000              .debug_abbrev
0000000000000000 l    d  .debug_line    0000000000000000              .debug_line
0000000000000000 l    d  .debug_str     0000000000000000              .debug_str
0000000000000000 l    df *ABS*  0000000000000000              crtstuff.c
0000000000000d70 l     F .text  0000000000000000              deregister_tm_clones
0000000000000db0 l     F .text  0000000000000000              register_tm_clones
0000000000000e00 l     F .text  0000000000000000              __do_global_dtors_aux
0000000000202080 l     O .bss   0000000000000001              completed.7698
0000000000201de0 l     O .fini_array    0000000000000000              __do_global_dtors_aux_fini_array_entry
0000000000000e40 l     F .text  0000000000000000              frame_dummy
0000000000201dd0 l     O .init_array    0000000000000000              __frame_dummy_init_array_entry
0000000000000000 l    df *ABS*  0000000000000000              TestSo.cpp
000000000000103d l     O .rodata        0000000000000001              _ZStL19piecewise_construct
0000000000202081 l     O .bss   0000000000000001              _ZStL8__ioinit
0000000000000fd6 l     F .text  0000000000000049              _Z41__static_initialization_and_destruction_0ii
000000000000101f l     F .text  0000000000000015              _GLOBAL__sub_I_TestSo.cpp
0000000000000000 l    df *ABS*  0000000000000000              crtstuff.c
00000000000012a0 l     O .eh_frame      0000000000000000              __FRAME_END__
0000000000000000 l    df *ABS*  0000000000000000              
0000000000202078 l     O .data  0000000000000008              DW.ref.__gxx_personality_v0
000000000000104c l       .eh_frame_hdr  0000000000000000              __GNU_EH_FRAME_HDR
0000000000202000 l     O .got.plt       0000000000000000              _GLOBAL_OFFSET_TABLE_
0000000000202080 l     O .data  0000000000000000              __TMC_END__
0000000000202070 l     O .data  0000000000000000              __dso_handle
0000000000201de8 l     O .dynamic       0000000000000000              _DYNAMIC
0000000000000e70 g     F .text  000000000000001c              _Z7TestAddRKiS0_
0000000000000000       F *UND*  0000000000000000              _ZNSolsEi@@GLIBCXX_3.4
0000000000000f30 g     F .text  0000000000000010              _ZN9TestClass9getIvalueEv
0000000000000000  w      *UND*  0000000000000000              __gmon_start__
0000000000001034 g     F .fini  0000000000000000              _fini
0000000000000000       F *UND*  0000000000000000              _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4
0000000000000000       F *UND*  0000000000000000              __cxa_atexit@@GLIBC_2.2.5
0000000000000000       F *UND*  0000000000000000              _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4
0000000000000000  w      *UND*  0000000000000000              _ITM_deregisterTMCloneTable
0000000000000000       F *UND*  0000000000000000              _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCXX_3.4
0000000000000000       F *UND*  0000000000000000              _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.21
0000000000000e4a g     F .text  0000000000000014              CTypeAdd
0000000000000000  w      *UND*  0000000000000000              _ITM_registerTMCloneTable
0000000000000000       F *UND*  0000000000000000              _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21
0000000000000f40 g     F .text  000000000000002d              _ZN9TestClass9getSvalueB5cxx11Ev
0000000000000000  w    F *UND*  0000000000000000              __cxa_finalize@@GLIBC_2.2.5
0000000000000f6e g     F .text  0000000000000068              _ZN9TestClass9showValueEv
0000000000000f10 g     F .text  000000000000001f              _ZN9TestClassD1Ev
0000000000000e5e g     F .text  0000000000000012              CTypeSub
0000000000000eaa g     F .text  0000000000000065              _ZN9TestClassC2Ev
0000000000000000       O *UND*  0000000000000000              _ZSt4cout@@GLIBCXX_3.4
0000000000000e8c g     F .text  000000000000001e              _Z7TestSubRKiS0_
0000000000000f10 g     F .text  000000000000001f              _ZN9TestClassD2Ev
0000000000202080 g       .bss   0000000000000000              __bss_start
0000000000000eaa g     F .text  0000000000000065              _ZN9TestClassC1Ev
0000000000202088 g       .bss   0000000000000000              _end
0000000000000000       F *UND*  0000000000000000              _ZNSolsEPFRSoS_E@@GLIBCXX_3.4
0000000000000000       F *UND*  0000000000000000              _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv@@GLIBCXX_3.4.21
0000000000000000       F *UND*  0000000000000000              _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
0000000000000000       F *UND*  0000000000000000              _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_@@GLIBCXX_3.4.21
0000000000202080 g       .data  0000000000000000              _edata
0000000000000000       F *UND*  0000000000000000              __gxx_personality_v0@@CXXABI_1.3
0000000000000000       F *UND*  0000000000000000              _Unwind_Resume@@GCC_3.0
0000000000000c88 g     F .init  0000000000000000              _init
0000000000000000       F *UND*  0000000000000000              _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc@@GLIBCXX_3.4.21


DYNAMIC SYMBOL TABLE:
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSolsEi
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSt8ios_base4InitC1Ev
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_atexit
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSt8ios_base4InitD1Ev
0000000000000000  w   D  *UND*  0000000000000000              _ITM_deregisterTMCloneTable
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev
0000000000000000  w   D  *UND*  0000000000000000              _ITM_registerTMCloneTable
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
0000000000000000  w   DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_finalize
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4 _ZSt4cout
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSolsEPFRSoS_E
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_
0000000000000000      DF *UND*  0000000000000000  CXXABI_1.3  __gxx_personality_v0
0000000000000000      DF *UND*  0000000000000000  GCC_3.0     _Unwind_Resume
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc
0000000000000e70 g    DF .text  000000000000001c  Base        _Z7TestAddRKiS0_
0000000000000f30 g    DF .text  0000000000000010  Base        _ZN9TestClass9getIvalueEv
0000000000000e4a g    DF .text  0000000000000014  Base        CTypeAdd
0000000000202088 g    D  .bss   0000000000000000  Base        _end
0000000000202080 g    D  .data  0000000000000000  Base        _edata
0000000000000f40 g    DF .text  000000000000002d  Base        _ZN9TestClass9getSvalueB5cxx11Ev
0000000000000e5e g    DF .text  0000000000000012  Base        CTypeSub
0000000000000e8c g    DF .text  000000000000001e  Base        _Z7TestSubRKiS0_
0000000000202080 g    D  .bss   0000000000000000  Base        __bss_start
0000000000000c88 g    DF .init  0000000000000000  Base        _init
0000000000001034 g    DF .fini  0000000000000000  Base        _fini
0000000000000f6e g    DF .text  0000000000000068  Base        _ZN9TestClass9showValueEv
0000000000000f10 g    DF .text  000000000000001f  Base        _ZN9TestClassD1Ev
0000000000000eaa g    DF .text  0000000000000065  Base        _ZN9TestClassC2Ev
0000000000000f10 g    DF .text  000000000000001f  Base        _ZN9TestClassD2Ev
0000000000000eaa g    DF .text  0000000000000065  Base        _ZN9TestClassC1Ev
 

3.nm


       nm是linux中用来列出目标文件的符号清单,也是一个gcc工具
常用命令:nm -AD libTestSo.so 
常用的options:
-A 在每个符号信息的前面打印所在对象文件名称;
-C 输出demangle过了的符号名称;
-D 打印动态符号;
-l 使用对象文件中的调试信息打印出所在源文件及行号;使用 -l 时,必须保证你的对象文件中带有符号调式信息,这一般要求你在编译的时候指定一个 -g 选项,见 Linux:Gcc。
-n 按照地址/符号值来排序;
-u 打印出那些未定义的符号;
使用nm前,最好先用Linux的file查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。
so符号表中的U t d b r B含义
U:代表so中调用了这个接口,但没有具体实现
T:代表so中有该函数的具体实现代码
列出My.so中未定义的符号
nm -u libTestSo.so  显示如下:

libTestSo.so:0000000000202080 B __bss_start
libTestSo.so:0000000000000e4a T CTypeAdd
libTestSo.so:0000000000000e5e T CTypeSub
libTestSo.so:                 U __cxa_atexit
libTestSo.so:                 w __cxa_finalize
libTestSo.so:0000000000202080 D _edata
libTestSo.so:0000000000202088 B _end
libTestSo.so:0000000000001034 T _fini
libTestSo.so:                 w __gmon_start__
libTestSo.so:                 U __gxx_personality_v0
libTestSo.so:0000000000000c88 T _init
libTestSo.so:                 w _ITM_deregisterTMCloneTable
libTestSo.so:                 w _ITM_registerTMCloneTable
libTestSo.so:                 U _Unwind_Resume
libTestSo.so:0000000000000e70 T _Z7TestAddRKiS0_
libTestSo.so:0000000000000e8c T _Z7TestSubRKiS0_
libTestSo.so:0000000000000f30 T _ZN9TestClass9getIvalueEv
libTestSo.so:0000000000000f40 T _ZN9TestClass9getSvalueB5cxx11Ev
libTestSo.so:0000000000000f6e T _ZN9TestClass9showValueEv
libTestSo.so:0000000000000eaa T _ZN9TestClassC1Ev
libTestSo.so:0000000000000eaa T _ZN9TestClassC2Ev
libTestSo.so:0000000000000f10 T _ZN9TestClassD1Ev
libTestSo.so:0000000000000f10 T _ZN9TestClassD2Ev
libTestSo.so:                 U _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv
libTestSo.so:                 U _ZNSolsEi
libTestSo.so:                 U _ZNSolsEPFRSoS_E
libTestSo.so:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc
libTestSo.so:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_
libTestSo.so:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev
libTestSo.so:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
libTestSo.so:                 U _ZNSt8ios_base4InitC1Ev
libTestSo.so:                 U _ZNSt8ios_base4InitD1Ev
libTestSo.so:                 U _ZSt4cout
libTestSo.so:                 U _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
libTestSo.so:                 U _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc

4.ldd


ldd用来打印或者查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。ldd不是一个可执行程序,而只是一个shell脚本。
--help 获取指令帮助信息;
--version 打印指令版本号;
-d,–data-relocs 执行重定位和报告任何丢失的对象;
-r, --function-relocs 执行数据对象和函数的重定位,并且报告任何丢失的对象和函数;
-u, --unused 打印未使用的直接依赖;
-v, --verbose 详细信息模式,打印所有相关信息;

ldd  libTestSo.so  显示如下:

        linux-vdso.so.1 (0x00007fff00f73000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa90af47000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa90ad2f000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa90a93e000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa90a5a0000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa90b4d3000)

//关于linux下动态库的使用可以参考如下博客:
https://www.dandelioncloud.cn/article/details/1571390345416241154

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/386367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于Git分支高级合并的一些笔记整理

写在前面 分享一些 Git 高级合并的笔记博文为《Pro Git》读书笔记整理感谢开源这本书的作者和把这本书翻译为中文的大佬们理解不足小伙伴帮忙指正&#xff0c;书很不错&#xff0c;感兴趣小伙伴可以去拜读下 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着天慢慢地黑下去&a…

传统图像处理方法实现车辆计数

本文通过传统OpenCV图像处理方法实现单向行驶的车辆计数。用于车辆检测的视频是在https://www.bilibili.com/video/BV1uS4y1v7qN/?spm_id_from333.337.search-card.all.click里面下载的。 思路一&#xff1a;来自B站某教程。大致是在视频中选取一窄长条区域&#xff0c;统计每…

【软件测试面试题】项目经验?资深测试 (分析+回答) 我不信你还拿不到offer......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 在面试过程中&#…

Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作

场景 Sqlite数据库 SQLite是一个进程内的库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。 它是一个零配置的数据库&#xff0c;这意味着与其他数据库不一样&#xff0c;您不需要在系统中配置。 就像其他数据库&#xff0c;SQLite 引擎不…

day03

文章目录一、盒子模型1. 基础概念2. 外边距3. 边框1) 边框实现2) 单边框设置3) 网页三角标制作4) 圆角边框5) 轮廓线2. 内边距3. 盒阴影4. 盒模型概念5. 标签最终尺寸的计算5. 标签最终尺寸的计算一、盒子模型 1. 基础概念 ​ 盒子模型分别由外边距、边框、内边距和标签内容组…

【Datawhale图机器学习】图神经网络的表示能力

图神经网络的表示能力 GNN理论 GNN有多强大 已经提出了许多GNN模型&#xff08;例如&#xff0c;GCN、GAT、GraphSAGE、设计空间&#xff09;。这些GNN模型的表达能力什么&#xff1f; 表达、学习、区分、拟合如何设计一个最具表现力的GNN模型 一个GNN层 多个GNN层 GNN…

在小公司工作3年,从事软件测试6年了,才发现自己还是处于“初级“水平,是不是该放弃....

金三银四面试季&#xff0c;相信大家都想好好把握住这次机会拿到心仪的offer&#xff0c;今天就给大家分享我面试经历及总结&#xff0c;文章最后我还会分享一些自己的面试经验还有面试宝典&#xff0c;希望对程序媛们和程序猿们都能有所帮助~ 市场分析 现在的市场环境确实不大…

基本系统性质

系统的记忆特性 定义&#xff1a;对任意的输入信号&#xff0c;如果每一个时刻系统的输出信号值仅取决于该时刻的输入信号值&#xff0c;这个系统就是无记忆系统 接下来请看一看下面那些是记忆系统&#xff0c;哪些是无记忆系统。 非常简单&#xff0c;只有第一个和最后一个是…

LeetCode202 快乐数

题目&#xff1a; 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a;对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果这个过程 结果…

vue 3.0组件(下)

文章目录前言&#xff1a;一&#xff0c;透传属性和事件1. 如何“透传属性和事件”2.如何禁止“透传属性和事件”3.多根元素的“透传属性和事件”4. 访问“透传属性和事件”二&#xff0c;插槽1. 什么是插槽2. 具名插槽3. 作用域插槽三&#xff0c;单文件组件CSS功能1. 组件作用…

css实现音乐播放器页面 · 笔记

效果 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, …

k8s 系列之 CoreDNS 解读

k8s 系列之 CoreDNS CoreDNS工作原理 kuberntes 中的 pod 基于 service 域名解析后&#xff0c;再负载均衡分发到 service 后端的各个 pod 服务中&#xff0c;如果没有 DNS 解析&#xff0c;则无法查到各个服务对应的 service 服务 在 Kubernetes 中&#xff0c;服务发现有几…

都2023年还不知道Java8如何优雅简化代码就落后了

1、使用 Stream 简化集合操作 Java8 Stream流操作总结_出世&入世的博客-CSDN博客 2、使用 Optional 简化判空逻辑 空指针异常&#xff08;NullPointerExceptions&#xff09;是 Java 最常见的异常之一&#xff0c;一直以来都困扰着 Java 程序员。一方面&#xff0c;程序…

springboot集成canal 实现mysql增量同步mongodb

一、canal官网https://kgithub.com/alibaba/canal/二、下载地址https://kgithub.com/alibaba/canal/releases三、细节1.6版本有bug&#xff08;如果只是部署deployer&#xff0c;那没问题&#xff0c;如果你想部署admin模块来监控&#xff0c;那就会报错&#xff1a;java.nio.B…

运算方法和运算电路

文章目录运算方法和运算电路基本运算部件定点数的移位运算算术移位逻辑移位循环移位定点数的加减运算原码的加减法补码的加减法原码的乘法补码的乘法原码的除法补码的除法符号扩展大小端和内存对齐刷题小结最后运算方法和运算电路 基本运算部件 运算器一般包含这么几部分&…

7 线性回归及Python实现

1 统计指标 随机变量XXX的理论平均值称为期望: μE(X)\mu E(X)μE(X)但现实中通常不知道μ\muμ, 因此使用已知样本来获取均值 X‾1n∑i1nXi.\overline{X} \frac{1}{n} \sum_{i 1}^n X_i. Xn1​i1∑n​Xi​.方差variance定义为&#xff1a; σ2E(∣X−μ∣2).\sigma^2 E(|…

STM32单片机的FLASH和RAM

STM32内置有Flash和RAM&#xff08;而RAM分为SRAM和DRAM&#xff0c;STM32内为SRAM&#xff09;&#xff0c;硬件上他们是不同的设备存储器、属于两个器件&#xff0c;但这两个存储器的寄存器输入输出端口被组织在同一个虚拟线性地址空间内。 MDK预处理、编译、汇编、链接后编…

月薪7k和月薪27k的测试人都有哪些区别?掌握这些,领导都要高看你...

了解软件测试这行的人都清楚&#xff0c;功能测试的天花板可能也就15k左右&#xff0c;而自动化的起点就在15k左右&#xff0c;当然两个岗位需要掌握的技能肯定是不一样的。 如果刚入门学习完软件测试&#xff0c;那么基本薪资会在7-8k左右&#xff0c;这个薪资不太高主要是因…

【存储】RAID0、RAID1、RAID3、RAID5、RAID6、混合RAID10、混合RAID50

存储RAID基本概念RAID数据组织形式RAID数据保护方式常用RAID级别与分类标准创建RAID组成员盘要求热备盘&#xff08;Hot Spare&#xff09;RAID 0的工作原理RAID 0的数据写入RAID 0的数据读取RAID 1的工作原理RAID 1的数据写入RAID 1的数据读取RAID 3的工作原理RAID 3的数据写入…

数据Python 异常处理

python标准异常异常名称描述BaseException所有异常的基类SystemExit解释器请求退出KeyboardInterrupt用户中断执行(通常是输入^C)Exception常规错误的基类StopIteration迭代器没有更多的值GeneratorExit生成器(generator)发生异常来通知退出StandardError所有的内建标准异常的基…