首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

定位Oops的具体代码行

来自Linus Torvalds的讨论: https://groups.google.com/group/linux.kernel/browse_thread/thread/b70bffe9015a8c41/ed9c0a0cfcd31111 又,http://kerneltrap.org/Linux/Further_Oops_Insights         例如这样的一个Oops:                 Oops: 0000 [#1] PREEMPT SMP                   Modules linked in: capidrv kernelcapi isdn slhc ipv6 loop dm_multipath snd_ens1371 gameport snd_rawmidi snd_ac97_codec ac97_bus snd_seq_dummy snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd parport_pc floppy parport pcnet32 soundcore mii pcspkr snd_page_alloc ac i2c_piix4 i2c_core button power_supply sr_mod sg cdrom ata_piix libata dm_snapshot dm_zero dm_mirror dm_mod BusLogic sd_mod scsi_mod ext3 jbd mbcache uhci_hcd ohci_hcd ehci_hcd                 Pid: 1726, comm: kstopmachine Not tainted (2.6.24-rc3-module #2)                 EIP: 0060:[] EFLAGS: 00010092 CPU: 0                 EIP is at list_del+0xa/0x61                 EAX: e0c3cc04 EBX: 00000020 ECX: 0000000e EDX: dec62000                 ESI: df6e8f08 EDI: 000006bf EBP: dec62fb4 ESP: dec62fa4                  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068                 Process kstopmachine (pid: 1726, ti=dec62000 task=df8d2d40 task.ti=dec62000)                 Stack: 000006bf dec62fb4 c04276c7 00000020 dec62fbc c044ab4c dec62fd0 c045336c                        df6e8f08 c04532b4 00000000 dec62fe0 c043deb0 c043de75 00000000 00000000                        c0405cdf df6e8eb4 00000000 00000000 00000000 00000000 00000000                 Call Trace:                  [] show_trace_log_lvl+0x1a/0x2f                  [] show_stack_log_lvl+0x9b/0xa3                  [] show_registers+0xa3/0x1df                  [] die+0x11f/0x200                  [] do_page_fault+0x533/0x61a                  [] error_code+0x72/0x78                  [] __unlink_module+0xb/0xf                  [] do_stop+0xb8/0x108                  [] kthread+0x3b/0x63                  [] kernel_thread_helper+0x7/0x10                  =======================                 Code: 6b c0 e8

02

linux设备驱动程序第四部分:从如何定位oops对代码的调试方法,驱动线「建议收藏」

在一个我们谈到了如何编写一个简单的字符设备驱动程序,我们不是神,编写肯定会失败的代码,在这个过程中,我们需要继续写代码调试。在普通c应用。我们经常使用printf输出信息。或者使用gdb要调试程序,然后司机如何调试它?的问题,在应用程序中执行这样的程序就会报segmentation fault的错误,而因为驱动程序的特殊性,出现此类情况后往往会直接造成系统宕机。并会抛出oops信息。那么我们怎样来分析oops信息呢,甚至依据oops信息来定位详细的出错的代码行呢?以下就依据一个简单的实例来说明怎样调试驱动程序。

01

Oops错误

在at91rm9200下写了一个spi的驱动,加载后,运行测试程序时,蹦出这么个吓人的东西: Unable to handle kernel paging request at virtual address 000e0000               pgd = c1f9c000                                                                   [000e0000] *pgd=20315801, *pmd = 20315801, *pte = 00000000, *ppte = 00000000     Internal error: Oops: 7                                                          CPU: 0                                                                           pc : []    lr : []    Tainted: P                             sp : c1fa3f50  ip : 00000001  fp : c1fa3f78                                      r10: 401421e4  r9 : c1fa2000  r8 : bffffe1c                                      r7 : 00000000  r6 : ffffffea  r5 : c0282a20  r4 : 00000001                       r3 : 00000000  r2 : 00000001  r1 : 000e0000  r0 : bffffe1c                       Flags: Nzcv  IRQs on  FIQs on  Mode SVC_32  Segment user                         Control: C000317F  Table: 21F9C000  DAC: 00000015                                Process addrv_test (pid: 73, stack limit = 0xc1fa2374)                           Stack: (0xc1fa3f50 to 0xc1fa4000)                                                3f40:                                     00000001 00000001 c0282a20 ffffffea    3f60: 00000000 c34a61f4 00000001 c1fa3fa4 c1fa3f7c c0044040 c34a6194 c1fa3f88    3f80: c0043a18 4001d9cc bffffe54 00008330 00000003 c0017644 00000000 c1fa3fa8    3fa0: c00174a0 c0043f74 4001d9cc c001d5bc 00000003 bffffe1c 00000001 bffffe1c    3fc0: 4001d9cc bffffe54 00008330 4000c85c 00000001 000084d4 401421e4 bffffe34    3fe0: 400e40d0 bffffe1c 0000856c 400e40d4 60000010 00000003 00000000 20000040    Backtrace:                                                                       Function entered at [] from []                                r4 = 00000001                                                                   Function entered at [] from []                                r8 = C0017644  r7 = 00000003  r6 = 00008330  r5 = BFFFFE54                       r4 = 4001D9CC

01

全网最硬核 JVM 内存解析 - 7.元空间存储的元数据

JVM 在执行 Java 应用程序时,将加载的 Java 类的许多细节记录在内存中,这些信息称为类元数据(Class MetaData)。这些元数据对于 Java 的很多灵活的语言以及虚拟机特性都是很重要的,比如动态类加载、JIT 实时编译、反射以及动态代理等等。不同的 JVM 加载类保存的内存信息是不一样的,它们通常在更低的内存占用与更快的执行速度之间进行权衡(类似于空间还是时间的权衡)。对于 OpenJDK Hotspot 使用的则是相对丰富的元数据模型来获得尽可能快的性能(时间优先,不影响速度的情况下尽量优化空间占用)。相比于 C,C++,Go 这些离线编译为可执行二进制文件的程序相比,像 JVM 这样的托管运行时动态解释执行或者编译执行的,则需要保留更多关于正在执行的代码的运行时信息。原因如下:

04

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券