c++ - 调试-进入操作系统功能?

标签 c++ c linux unix eclipse-cdt

在 Linux 上编写 C++ 代码时,我使用 Eclipse CDT。当进入 C/C++ OS 函数时,我可以看到汇编程序,但考虑到文件都存储在/usr/include/中,我认为调试器随后会进入 C/C++ 的每一行。

那么,有没有什么方法可以在 Linux 上调试 C++,从而允许您进入操作系统功能的 C/C++?

最佳答案

是的,您可以在 Linux 下使用 gdb(GNU 调试器)来完成。该界面非常粗鲁,但可以完成工作。一个小例子:首先,启动 gdb。

gdb your_program

那么,你就在其中。

....
Reading symbols from foobar...done.
(gdb) start # begin the debug session
...
(gdb) disas # show the disassembly code of the current function (main)
.... # lot of asm
0x00000000004007d4 <+17>:    call   0x400440 <malloc@plt>
0x00000000004007d9 <+22>:    mov    QWORD PTR [rax],0x0
0x00000000004007e0 <+29>:    push   rax
... # lot of asm
(gdb) break *0x4007d4 # set a break point at the address of the call malloc
Breakpoint 2 at 0x4007d4
(gdb) run # run until breakpoint
...
Breakpoint 2, 0x00000000004007d4 in main () # the breakpoint has been reached
=> 0x00000000004007d4 <main+17>:        e8 67 fc ff ff  call   0x400440 <malloc@plt>
(gdb) si # step into the malloc
0x0000000000400440 in malloc@plt ()
=> 0x0000000000400440 <malloc@plt+0>:   ff 25 92 11 20 00       jmp    QWORD PTR [rip+0x201192]        # 0x6015d8 <malloc@got.plt> # you see code from malloc now
(gdb) ni # next instruction in malloc
...
(gdb) finish # quit the current function, actually malloc
(gdb)

但是,您将无法轻松显示相应的高级源代码。您能做的最好的事情就是同时阅读库/内核代码。

例如,您可以从glibc(GNU 标准C 库)中读取malloc 的代码here , 在 malloc/malloc.c 中。

关于c++ - 调试-进入操作系统功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17176514/

相关文章:

c++ - 为什么 RVO 要求如此严格?

c - 在c中读取和打印矩阵

c - 如何链接两个目标文件

c - C 程序的奇怪输出随重定向而改变

c - SIGQUIT,通过快速、连续的调用处理第二个信号

linux - Matlab Gui 兼容性 - Linux 和 MacOS 之间的不同方面

c++ - 初始化 FMOD 时出错

c++ - 将简单的 Qt 程序移植并运行到 FriendlyARM 嵌入式设备

c++ - 为什么链接器提示此模板中有多个定义?

python - 在 Oracle Linux 中安装 pandas >= 0.23