0

我英语不好,对此我很抱歉。现在,有一个关于我何时使用 GDB 调试 samba 的问题。

    # gdb /usr/local/samba/sbin/smbd
    GNU gdb Red Hat Linux (5.2.1-4)
    Copyright 2002 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "i386-redhat-linux"...
    (gdb) r
    Starting program: /usr/local/samba/sbin/smbd 
    Program exited normally.
    (gdb) info program

正在调试的程序没有运行。那么,我应该如何使用 GDB 调试 samba?

ps:Samba 3.0.5 的版本 我从源代码安装samba。

4

2 回答 2

1

您可以使用sudo ./smbd -i启动 smbd 并查看它有什么问题。在我的情况下: smbd 尝试在 /usr/local/samba/etc/smb.conf 中找到 smb.conf 并且没有,所以退出。我将 /etc/samba/smb.conf 复制到不想要的路径,然后一切正常。

希望这可以帮到你。

于 2016-09-01T09:25:37.207 回答
0
  1. 从http://www.samba.org下载 samba 源代码并编译(没有源代码,将无法进行符号调试)。
  2. 停止或终止任何其他 samba 实例。
  3. 在 gdb 下启动 samba:

    gdb <path/to/compiled/smbd>
    
  4. 指定smbd参数:

    set args -i -M single
    

参数-i -M single强制smbd作为单个进程启动,不要守护进程并将所有消息和错误打印到 stdout/stderr。

现在,您可以像通常对任何其他程序一样设置断点并跟踪源代码。

注意:gdb您可能会发现使用起来更方便gdb-tui(gdb 文本用户界面),或者使用其他调试器,而不是使用ddd.

于 2013-08-22T03:31:55.620 回答