Visual c++ for Linux 开发调试共享库

Visual c++ for Linux Development debugging shared library

我想在 Visual C++ Linux 开发中调试 shared library。调试可执行文件运行良好,但断点未命中共享库。我该如何解决?

Attached file 是 visual studio 解决方案,包括 .c 和 Makefile。

例子很简单。

  1. 打开共享库
  2. 读取共享库中函数的指针
  3. 调用函数。

程序运行良好。但是调试共享库不起作用。 main.c 中的断点命中但 com.c 中的断点 NOT 命中。

/* main.c */

#include <stdio.h>
#include <dlfcn.h>

int main(int argc, char** argv)
{
    void* dl_handle;
    dl_handle = dlopen("../so/libcom.so.1", RTLD_LAZY);

    if (!dl_handle) {
        printf(" error : %s \n", dlerror());
        return 0;
    }

    printf(" now call minicommon.h's function.. that is < void print_n(int n) >...\n");
    void(*pFunc)(int);
    pFunc = dlsym(dl_handle, "print_n");
    (*pFunc)(18);

    return 0;
}

/* com.c */

#include <stdio.h>

void print_n(int a)
{
    printf("SO - print: [%d]\n", a);
}

/* Makefile for main.c */

all: main

main: main.o
    gcc -W -Wall -gdwarf-2 -o main ../so/libcom.so.1 main.o -ldl

main.o: main.c
    gcc -Wall -c -gdwarf-2 -o main.o main.c

clean:
    rm -rf *.o main

/* Makefile for com.c */
all: libcom.so.1

libcom.so.1: com.o
    gcc -shared -gdwarf-2 -o libcom.so.1 com.o

com.o: com.c
    gcc -Wall -c -gdwarf-2 -o com.o com.c -fPIC

clean:
    rm -rf *.o libcom.so.1

共享库打开前可以调试吗?

环境
- Window 10
- VirtualBox 中的 CentOS 7
- Visual Studio 2015 更新 3
- 用于 linux 开发的 Visual C++ 1.0.7

为了能够调试任何二进制文件(包括共享库),您需要可用的调试符号,编译到二进制文件本身或作为单独的文件。

在大多数 Linux 发行版中,您可以将调试符号安装为单独的包; Ubuntu 例如将这些包命名为 <packagename>-dbg。检查这些是否也适用于您的开发环境。