Linux Kernel KDB KGDB 实体机内核调试

2023-12-20 21:20

本文主要是介绍Linux Kernel KDB KGDB 实体机内核调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内核编译配置

CONFIG_DEBUG_INFO=y                     # 编译debug infoCONFIG_MAGIC_SYSRQ=y                    # 功能编译开关
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1   # 默认开启项 默认存在 /proc/sysrq-trigger
CONFIG_MAGIC_SYSRQ_SERIAL=y             # 串行sysrq (许多嵌入式主板都具有断开连接的 TTL 电平串行,这可能会产生一些无效的信号。导致检测到虚假sysrq )CONFIG_KGDB=y                           # 需要开启 gdb 远程调试内核
CONFIG_KGDB_KDB=y                       # KDB调试前端
CONFIG_KDB_DEFAULT_ENABLE=0x0           # 默认不启动KDB 通过模块拔插方式开启
CONFIG_KDB_KEYBOARD=y                   # 需要开启 可以使用键盘
CONFIG_KDB_CONTINUE_CATASTROPHIC=0      # KDB调试内核引发的Oops等容错,=0 总是继续 =1 尝试继续 =2 强制重新启动# CONFIG_SERIAL_KGDB_NMI is not set     # 此特殊驱动程序允许您临时使用 NMI 调试器端口作为普通控制台(假设该端口已连接到 KGDB)
CONFIG_HAVE_ARCH_KGDB=y                 # 依赖项
CONFIG_KGDB_SERIAL_CONSOLE=y            # KGDB 串口调试终端配置,与 kgdb 共享串行控制台。初始化必须使用 Sysrq -g 进入
CONFIG_KGDB_TESTS=y                     # 这是一个 kgdb I/O 模块,专门用于测试kgdb 的内部功能。回归测试使用
# CONFIG_KGDB_TESTS_ON_BOOT is not set  # 启动时进行模块内部测试
CONFIG_KGDB_LOW_LEVEL_TRAP=y            # 这将为断点异常处理程序添加对 kgdb 的额外回调,这将允许 kgdb 单步执行。

内核运行时设置

  • 关闭随机化

    grub 行添加 nokaslr
    

    注:不设置会报错 -22 Permisson denied

  • kdb on conlose 设置 (对应CONFIG_KDB_DEFAULT_ENABLE=0x0)

    echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc # ttyS0 tty0 ttyAMA0 需要确认串口输出设备
    
  • 开启 kdb 命令行

    echo 1 > /sys/module/kdb/parameters/cmd_enable 
    

    注:不设置会报错 -22 Permisson denied

  • 进入命令行

    • 方法1:panic 自动进入
    • 方法2:手动进入
      echo -g > /proc/sysrq-trigger
      
  • kdb 开机即起

    grub 行添加 nokaslr kgdbwait kgdboc=ttyS0,115200n8 kdb.cmd_enable=1 
    

    注:kgdb属于模块且依赖串口,cpu 初始化 调度算法初始化等流程执行已过

kdb调试

  • 栈 bt

    [0]kdb> bt 
    Stack traceback for pid 1092
    0xffff88823568c680     1092     1080  1    2   R  0xffff88823568d9c0  bash
    
  • 所有CPU运行任务 -btc

    [0]kdb> btc
    btc: cpu status: Currently on cpu 0
    Available cpus: 0-1(I), 2, 3-7(I)
    Stack traceback for pid 0
    0xffffffff82412780        0        0  1    0   I  0xffffffff82413ac0 *swapper/0
    Stack traceback for pid 0
    0xffff888106e05e00        0        0  1    1   I  0xffff888106e07140  swapper/1
    Stack traceback for pid 1092
    0xffff88823568c680     1092     1080  1    2   R  0xffff88823568d9c0  bash
    Stack traceback for pid 0
    0xffff888106e04680        0        0  1    3   I  0xffff888106e059c0  swapper/3
    Stack traceback for pid 0
    0xffff888106e2af00        0        0  1    4   I  0xffff888106e2c240  swapper/4
    Stack traceback for pid 0
    0xffff888106e2c680        0        0  1    5   I  0xffff888106e2d9c0  swapper/5
    Stack traceback for pid 0
    0xffff888106e29780        0        0  1    6   I  0xffff888106e2aac0  swapper/6
    Stack traceback for pid 0
    0xffff888106e28000        0        0  1    7   I  0xffff888106e29340  swapper/7
    
  • 模块状态 lsmod

    [2]kdb> lsmod
    Module                  Size  modstruct     Used by
    sunrpc                364544  0xffffffffc04d4e00    1  (Live) 0xffffffffc0488000 [ ]
    kvm_intel             237568  0xffffffffc052d900    0  (Live) 0xffffffffc04fb000 [ ]
    snd_hda_codec_generic   86016  0xffffffffc0623580    1  (Live) 0xffffffffc0611000 [ ]
    kvm                   679936  0xffffffffc05fd100    1  (Live) 0xffffffffc056a000 [ kvm ]
    irqbypass              16384  0xffffffffc03bc040    1  (Live) 0xffffffffc03ba000 [ irqbypass ]
    crct10dif_pclmul       16384  0xffffffffc0377200    0  (Live) 0xffffffffc0375000 [ ]
    crc32_pclmul           16384  0xffffffffc034f200    0  (Live) 0xffffffffc034d000 [ ]
    qxl                    73728  0xffffffffc04f76c0    1  (Live) 0xffffffffc04e8000 [ ]
    snd_hda_intel          45056  0xffffffffc03b7000    0  (Live) 0xffffffffc03ae000 [ ]
    ghash_clmulni_intel    16384  0xffffffffc00b3400    0  (Live) 0xffffffffc00b1000 [ ]
    snd_hda_codec         131072  0xffffffffc0482600    2  (Live) 0xffffffffc0467000 [ snd_hda_codec snd_hda_codec ]
    ttm                   118784  0xffffffffc0427e80    1  (Live) 0xffffffffc0411000 [ ttm ]
    drm_kms_helper        176128  0xffffffffc0563600    1  (Live) 0xffffffffc053e000 [ drm_kms_helper ]
    snd_hda_core           77824  0xffffffffc0328380    3  (Live) 0xffffffffc0318000 [ snd_hda_core snd_hda_core snd_hda_core ]
    snd_hwdep              20480  0xffffffffc03eb080    1  (Live) 0xffffffffc03e8000 [ snd_hwdep ]
    syscopyarea            16384  0xffffffffc03c5000    1  (Live) 0xffffffffc03c3000 [ syscopyarea ]
    snd_pcm                98304  0xffffffffc03a9640    3  (Live) 0xffffffffc0395000 [ snd_pcm snd_pcm snd_pcm ]
    intel_rapl_perf        16384  0xffffffffc0383740    0  (Live) 0xffffffffc0381000 [ ]
    sysfillrect            16384  0xffffffffc037c040    1  (Live) 0xffffffffc037a000 [ sysfillrect ]
    sysimgblt              16384  0xffffffffc0365000    1  (Live) 0xffffffffc0363000 [ sysimgblt ]
    fb_sys_fops            16384  0xffffffffc035e000    1  (Live) 0xffffffffc035c000 [ fb_sys_fops ]
    snd_timer              32768  0xffffffffc0372100    1  (Live) 0xffffffffc036c000 [ snd_timer ]
    virtio_balloon         20480  0xffffffffc0355240    0  (Live) 0xffffffffc0352000 [ ]
    sg                     40960  0xffffffffc034a0c0    0  (Live) 0xffffffffc0342000 [ ]
    drm                   475136  0xffffffffc02f5940    4  (Live) 0xffffffffc028d000 [ drm drm drm ]
    snd                    86016  0xffffffffc03123c0    6  (Live) 0xffffffffc0302000 [ snd snd snd snd snd snd ]
    psmouse               159744  0xffffffffc027bec0    0  (Live) 0xffffffffc0259000 [ ]
    soundcore              16384  0xffffffffc0252040    1  (Live) 0xffffffffc0250000 [ soundcore ]
    i2c_piix4              24576  0xffffffffc0249540    0  (Live) 0xffffffffc0245000 [ ]
    pcspkr                 16384  0xffffffffc023f100    0  (Live) 0xffffffffc023d000 [ ]
    ip_tables              28672  0xffffffffc0031280    0  (Live) 0xffffffffc002c000 [ ]
    ext4                  675840  0xffffffffc01f43c0    2  (Live) 0xffffffffc015c000 [ ]
    mbcache                16384  0xffffffffc0097080    1  (Live) 0xffffffffc0095000 [ mbcache ]
    jbd2                  110592  0xffffffffc0139b00    1  (Live) 0xffffffffc0122000 [ jbd2 ]
    sr_mod                 28672  0xffffffffc0109140    0  (Live) 0xffffffffc0104000 [ ]
    cdrom                  57344  0xffffffffc011f280    1  (Live) 0xffffffffc0113000 [ cdrom ]
    sd_mod                 49152  0xffffffffc01014c0    3  (Live) 0xffffffffc00f7000 [ ]
    ata_generic            16384  0xffffffffc006c700    0  (Live) 0xffffffffc006a000 [ ]
    ata_piix               36864  0xffffffffc0159240    2  (Live) 0xffffffffc0152000 [ ]
    crc32c_intel           24576  0xffffffffc010f200    4  (Live) 0xffffffffc010c000 [ ]
    libata                237568  0xffffffffc00ef9c0    2  (Live) 0xffffffffc00bc000 [ libata libata ]
    serio_raw              16384  0xffffffffc00ae200    0  (Live) 0xffffffffc00ac000 [ ]
    virtio_console         32768  0xffffffffc00a4400    0  (Live) 0xffffffffc009e000 [ ]
    e1000                 143360  0xffffffffc0091140    0  (Live) 0xffffffffc0071000 [ ]
    floppy                 81920  0xffffffffc0063c40    0  (Live) 0xffffffffc0055000 [ ]
    
  • 进程状态 ps

    [2]kdb> ps
    7 idle processes (state I) and 
    39 sleeping system daemon (state M) processes suppressed,
    use 'ps A' to see all.
    Task Addr               Pid   Parent [*] cpu State Thread             Command
    0xffff88823568c680     1092     1080  1    2   R  0xffff88823568d9c0 *bash0xffff888106db4680        1        0  0    0   S  0xffff888106db59c0  systemd
    0xffff888106db0000        3        2  0    0   D  0xffff888106db1340  rcu_gp
    0xffff888106db5e00        4        2  0    0   D  0xffff888106db7140  rcu_par_gp
    0xffff888106db2f00        5        2  0    0   D  0xffff888106db4240  kworker/0:0
    0xffff888106deaf00        6        2  0    0   D  0xffff888106dec240  kworker/0:0H
    0xffff888106dec680        7        2  0    2   D  0xffff888106ded9c0  kworker/u16:0
    0xffff888106de9780        8        2  0    0   D  0xffff888106deaac0  mm_percpu_wq
    0xffff888106dede00       10        2  0    7   D  0xffff888106def140  rcu_sched
    0xffff888106e01780       11        2  0    0   D  0xffff888106e02ac0  rcu_bh
    0xffff888106e49780       17        2  0    1   D  0xffff888106e4aac0  kworker/1:0
    0xffff888106e48000       18        2  0    1   D  0xffff888106e49340  kworker/1:0H
    0xffff888106e75e00       22        2  0    2   D  0xffff888106e77140  kworker/2:0
    0xffff888106e72f00       23        2  0    2   D  0xffff888106e74240  kworker/2:0H
    0xffff888106e90000       27        2  0    3   D  0xffff888106e91340  kworker/3:0
    0xffff888106e95e00       28        2  0    3   D  0xffff888106e97140  kworker/3:0H
    0xffff888106ecaf00       32        2  0    4   D  0xffff888106ecc240  kworker/4:0
    0xffff888106ecc680       33        2  0    4   D  0xffff888106ecd9c0  kworker/4:0H
    0xffff888106ef0000       37        2  0    5   D  0xffff888106ef1340  kworker/5:0
    0xffff888106ef5e00       38        2  0    5   D  0xffff888106ef7140  kworker/5:0H
    0xffff888106f1de00       42        2  0    6   D  0xffff888106f1f140  kworker/6:0
    0xffff888106f1af00       43        2  0    6   D  0xffff888106f1c240  kworker/6:0H
    0xffff888106f41780       47        2  0    7   D  0xffff888106f42ac0  kworker/7:0
    0xffff888106f40000       48        2  0    7   D  0xffff888106f41340  kworker/7:0H
    0xffff888106f75e00       51        2  0    1   D  0xffff888106f77140  netns
    0xffff888106f74680       53        2  0    0   D  0xffff888106f759c0  kworker/0:1
    0xffff888237811780       56        2  0    2   D  0xffff888237812ac0  writeback
    0xffff888237858000       60        2  0    3   D  0xffff888237859340  crypto
    0xffff88823785de00       61        2  0    4   D  0xffff88823785f140  kintegrityd
    0xffff88823785af00       62        2  0    6   D  0xffff88823785c240  kblockd
    0xffff888237922f00       63        2  0    5   D  0xffff888237924240  md
    0xffff888237924680       64        2  0    7   D  0xffff8882379259c0  edac-poller
    0xffff888237920000       66        2  0    4   D  0xffff888237921340  kworker/4:1
    0xffff888237925e00       67        2  0    2   R  0xffff888237927140  kworker/2:1
    0xffff888236c61780       68        2  0    1   D  0xffff888236c62ac0  kworker/1:1
    0xffff888236c60000       69        2  0    3   D  0xffff888236c61340  kworker/3:1
    0xffff8882337a9780       96        2  0    6   D  0xffff8882337aaac0  kworker/6:1
    0xffff88823306af00      101        2  0    7   D  0xffff88823306c240  kworker/u16:1
    0xffff888233069780      103        2  0    7   D  0xffff88823306aac0  kworker/7:1
    0xffff888233002f00      134        2  0    0   D  0xffff888233004240  kthrotld
    0xffff888233004680      135        2  0    2   D  0xffff8882330059c0  acpi_thermal_pm
    0xffff888233005e00      136        2  0    4   D  0xffff888233007140  kmpath_rdacd
    0xffff888233000000      137        2  0    1   D  0xffff888233001340  kaluad
    0xffff8882337ac680      138        2  0    5   D  0xffff8882337ad9c0  ipv6_addrconf
    0xffff8882337aaf00      139        2  0    3   D  0xffff8882337ac240  kworker/3:2
    0xffff8882337ade00      140        2  0    7   D  0xffff8882337af140  kstrp
    0xffff8882337a8000      141        2  0    5   D  0xffff8882337a9340  kworker/5:1
    0xffff8882330dc680      229        2  0    6   D  0xffff8882330dd9c0  kworker/6:2
    0xffff888233601780      238        2  0    5   D  0xffff888233602ac0  kworker/5:2
    0xffff888233734680      243        2  0    4   D  0xffff8882337359c0  kworker/4:2
    0xffff888233731780      244        2  0    4   D  0xffff888233732ac0  kworker/4:3
    0xffff888233735e00      391        2  0    4   D  0xffff888233737140  ata_sff
    0xffff888233020000      398        2  0    4   D  0xffff888233021340  scsi_tmf_0
    0xffff888233704680      400        2  0    4   D  0xffff8882337059c0  scsi_tmf_1
    0xffff888233605e00      401        2  0    3   D  0xffff888233607140  kworker/u16:2
    0xffff888233600000      403        2  0    1   D  0xffff888233601340  kworker/u16:3
    0xffff88823306de00      420        2  0    0   D  0xffff88823306f140  kworker/0:2
    0xffff888233068000      423        2  0    2   D  0xffff888233069340  kworker/2:1H
    0xffff888233021780      424        2  0    5   D  0xffff888233022ac0  kworker/5:1H
    0xffff888236c65e00      425        2  0    2   D  0xffff888236c67140  kworker/2:2
    0xffff88823089c680      426        2  0    4   D  0xffff88823089d9c0  kworker/4:1H
    0xffff888230899780      430        2  0    3   D  0xffff88823089aac0  kworker/3:1H
    0xffff888230898000      431        2  0    1   D  0xffff888230899340  kworker/1:1H
    0xffff88823089de00      432        2  0    1   D  0xffff88823089f140  kworker/1:2
    0xffff88823089af00      433        2  0    7   D  0xffff88823089c240  kworker/7:1H
    0xffff888230929780      435        2  0    6   D  0xffff88823092aac0  kworker/6:1H
    0xffff88823092de00      446        2  0    0   D  0xffff88823092f140  kworker/0:1H
    0xffff88823092c680      452        2  0    4   D  0xffff88823092d9c0  ext4-rsv-conver
    0xffff88823092af00      511        2  0    6   D  0xffff88823092c240  kworker/6:3
    0xffff888233634680      513        2  0    7   D  0xffff8882336359c0  kworker/7:2
    0xffff888233632f00      519        2  0    1   D  0xffff888233634240  kworker/1:3
    0xffff8882330daf00      553        1  0    5   S  0xffff8882330dc240  systemd-journal
    0xffff8882356eaf00      567        1  0    0   S  0xffff8882356ec240  systemd-udevd
    0xffff888234b0de00      688        2  0    0   D  0xffff888234b0f140  ttm_swap
    0xffff888234b08000      702        2  0    4   D  0xffff888234b09340  kworker/4:4
    0xffff888233630000      705        2  0    3   D  0xffff888233631340  ext4-rsv-conver
    0xffff888233038000      715        1  0    1   S  0xffff888233039340  mdadm
    0xffff88823303de00      716        1  0    1   S  0xffff88823303f140  auditd
    0xffff888232a10000      717        1  0    4   S  0xffff888232a11340  auditd
    0xffff888233039780      719        2  0    4   D  0xffff88823303aac0  kworker/4:5
    0xffff8882330f5e00      735        1  0    0   S  0xffff8882330f7140  dbus-daemon
    0xffff888235688000      742        1  0    5   S  0xffff888235689340  chronyd
    0xffff8882361ade00      745        1  0    7   S  0xffff8882361af140  irqbalance
    0xffff88823314af00      746        1  0    2   S  0xffff88823314c240  gmain
    0xffff8882330dde00      753        1  0    5   S  0xffff8882330df140  NetworkManager
    0xffff888232a15e00      758        1  0    4   S  0xffff888232a17140  gmain
    0xffff888232a11780      759        1  0    2   S  0xffff888232a12ac0  gdbus
    0xffff8882330d9780      755        1  0    5   S  0xffff8882330daac0  systemd-logind
    0xffff888233148000      756        2  0    3   D  0xffff888233149340  kworker/3:3
    0xffff88823314de00      757        2  0    3   D  0xffff88823314f140  kworker/3:4
    0xffff8882329dde00      763        2  0    5   D  0xffff8882329df140  rpciod
    0xffff8882329daf00      764        2  0    0   D  0xffff8882329dc240  kworker/u17:0
    0xffff8882329d9780      765        2  0    2   D  0xffff8882329daac0  xprtiod
    0xffff888233602f00      766        1  0    0   S  0xffff888233604240  sshd
    0xffff88823568de00      783      753  0    4   S  0xffff88823568f140  dhclient
    0xffff888234b1de00      794        1  0    0   S  0xffff888234b1f140  gssproxy
    0xffff8882361a8000      801        1  0    4   S  0xffff8882361a9340  gssproxy
    0xffff8882361a9780      802        1  0    3   S  0xffff8882361aaac0  gssproxy
    0xffff8882361aaf00      803        1  0    6   S  0xffff8882361ac240  gssproxy
    0xffff8882361ac680      804        1  0    7   S  0xffff8882361ad9c0  gssproxy
    0xffff888233631780      805        1  0    3   S  0xffff888233632ac0  gssproxy
    0xffff888233701780      816        1  0    7   S  0xffff888233702ac0  crond
    0xffff888233705e00      817        1  0    2   S  0xffff888233707140  agetty
    0xffff888233022f00     1072        2  0    0   D  0xffff888233024240  kworker/0:3
    0xffff888233025e00     1080        1  0    1   S  0xffff888233027140  login
    0xffff8882330d8000     1084        1  0    6   S  0xffff8882330d9340  systemd
    0xffff888230a6af00     1085     1084  0    3   S  0xffff888230a6c240  (sd-pam)
    0xffff88823568c680     1092     1080  1    2   R  0xffff88823568d9c0 *bash
    
  • 设置断点 bp

  • 查看断点 bl

  • 清除断点 bc

  • 开启断点 be

  • 关闭断点 bd

  • 单步执行 ss

  • 帮助 help / ?

     [3]kdb> ? Command         Usage                Description----------------------------------------------------------md              <vaddr>             Display Memory Contents, also mdWcN, e.g. md8c1mdr             <vaddr> <bytes>     Display Raw Memorymdp             <paddr> <bytes>     Display Physical Memorymds             <vaddr>             Display Memory Symbolicallymm              <vaddr> <contents>  Modify Memory Contentsgo              [<vaddr>]           Continue Executionrd                                  Display Registersrm              <reg> <contents>    Modify Registersef              <vaddr>             Display exception framebt              [<vaddr>]           Stack tracebackbtp             <pid>               Display stack for process <pid>bta             [D|R|S|T|C|Z|E|U|I|M|A]Backtrace all processes matching state flagbtc                                 Backtrace current process on each cpubtt             <vaddr>             Backtrace process given its struct task addressenv                                 Show environment variablesset                                 Set environment variableshelp                                Display Help Message?                                   Display Help Messagecpu             <cpunum>            Switch to new cpukgdb                                Enter kgdb modeps              [<flags>|A]         Display active task listpid             <pidnum>            Switch to another taskreboot                              Reboot the machine immediatelylsmod                               List loaded kernel modulessr              <key>               Magic SysRq keydmesg           [lines]             Display syslog bufferdefcmd          name "usage" "help" Define a set of commands, down to endefcmdkill            <-signal> <pid>     Send a signal to a processsummary                             Summarize the systemper_cpu         <sym> [<bytes>] [<cpu>]Display per_cpu variablesgrephelp                            Display help on | grepbp              [<vaddr>]           Set/Display breakpointsbl              [<vaddr>]           Display breakpointsbph             [<vaddr>]           [datar [length]|dataw [length]]   Set hw brkbc              <bpnum>             Clear Breakpointbe              <bpnum>             Enable Breakpointbd              <bpnum>             Disable Breakpointss                                  Single Stepdumpcommon                          Common kdb debuggingdumpall                             First line debuggingdumpcpu                             Same as dumpall but only tasks on cpusftdump          [skip_#lines] [cpu] Dump ftrace log
    

这篇关于Linux Kernel KDB KGDB 实体机内核调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517551

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念