Visual c++ for Linux 开发调试共享库
Visual c++ for Linux Development debugging shared library
我想在 Visual C++ Linux 开发中调试 shared library
。调试可执行文件运行良好,但断点未命中共享库。我该如何解决?
Attached file 是 visual studio 解决方案,包括 .c 和 Makefile。
例子很简单。
- 打开共享库
- 读取共享库中函数的指针
- 调用函数。
程序运行良好。但是调试共享库不起作用。 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
。检查这些是否也适用于您的开发环境。
我想在 Visual C++ Linux 开发中调试 shared library
。调试可执行文件运行良好,但断点未命中共享库。我该如何解决?
Attached file 是 visual studio 解决方案,包括 .c 和 Makefile。
例子很简单。
- 打开共享库
- 读取共享库中函数的指针
- 调用函数。
程序运行良好。但是调试共享库不起作用。 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
。检查这些是否也适用于您的开发环境。