我用“-g”命令编译了我的代码,在gdb中我可以
“L”列出源代码
“disass”列出汇编代码。
但是我想在windows visual studio中看到我所能看到的,列出一行源代码,列出其对应的反汇编(几行),然后是另一行源代码,依此类推。
我猜gdb应该支持这个,如何指定?
答案 0 :(得分:2)
您可以使用/m
或/s
标记将源和汇编混合到disassemble
。通常我认为前者就是你想要的。所以:
(gdb) disassemble/m main
答案 1 :(得分:0)
但我想在windows visual studio中看到我所能看到的内容, 列出一行源代码,列出其对应的 反汇编(几行)
您可以使用one of gdb TUI layouts。以下是/usr/bin/ls
layout asm
的示例调试会话:
[ksemenov@NB824RIH ~]$ gdb -q /usr/bin/ls
Reading symbols from /usr/bin/ls...Reading symbols from /usr/lib/debug/usr/bin/ls.debug...done.
done.
(gdb) start
Temporary breakpoint 1 at 0x39a0: file ../src/ls.c, line 1249.
Starting program: /usr/bin/ls
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Temporary breakpoint 1, main (argc=1, argv=0x7fffffffdde8) at ../src/ls.c:1249
1249 {
Missing separate debuginfos, use: dnf debuginfo-install pcre-8.39-3.fc24.x86_64
(gdb) layout asm
以下是gdb中的样子:
┌─────────────────────────────────────────────────────────────────┐
>│0x5555555579a0 <main> push %r15 │
│0x5555555579a2 <main+2> push %r14 │
│0x5555555579a4 <main+4> mov %edi,%r15d │
│0x5555555579a7 <main+7> push %r13 │
│0x5555555579a9 <main+9> push %r12 │
│0x5555555579ab <main+11> mov %rsi,%r14 │
│0x5555555579ae <main+14> push %rbp │
│0x5555555579af <main+15> push %rbx │
│0x5555555579b0 <main+16> sub $0x3a8,%rsp │
│0x5555555579b7 <main+23> mov (%rsi),%rdi │
│0x5555555579ba <main+26> mov %fs:0x28,%rax │
│0x5555555579c3 <main+35> mov %rax,0x398(%rsp) │
│0x5555555579cb <main+43> xor %eax,%eax │
│0x5555555579cd <main+45> callq 0x555555562ed0 <set_progra│
│0x5555555579d2 <main+50> lea 0x15e7c(%rip),%rsi │
│0x5555555579d9 <main+57> mov $0x6,%edi │
│0x5555555579de <main+62> callq 0x5555555578a8 │
│0x5555555579e3 <main+67> lea 0x1302d(%rip),%rsi │
│0x5555555579ea <main+74> lea 0x1300c(%rip),%rdi │
│0x5555555579f1 <main+81> callq 0x5555555576d8 │
│0x5555555579f6 <main+86> lea 0x13000(%rip),%rdi │
│0x5555555579fd <main+93> callq 0x5555555576b8 │
│0x555555557a02 <main+98> lea 0x21b7cf(%rip),%rax │
│0x555555557a09 <main+105> lea 0x7c60(%rip),%rdi #│
│0x555555557a10 <main+112> movl $0x2,(%rax) │
│0x555555557a16 <main+118> callq 0x555555569020 <atexit> │
│0x555555557a1b <main+123> movabs $0x8000000000000000,%rax │
└─────────────────────────────────────────────────────────────────┘
Thread 0x7ffff7fd78 In: main L1249 PC: 0x5555555579a0
(gdb)
除了layout asm
之外还有其他布局。另请参阅layout split
,这可能更符合您的需求。