首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制相对调试符号路径(maven-本机插件)

强制相对调试符号路径(maven-本机插件)
EN

Stack Overflow用户
提问于 2013-05-24 10:56:42
回答 1查看 2.6K关注 0票数 4

我正在使用本机maven插件在linux上编译一个共享库。我传递编译器选项-g以启用调试符号生成。以下是POM的摘录:

代码语言:javascript
复制
            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>native-maven-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <workingDirectory></workingDirectory>
                <compilerStartOptions>
                    <compilerStartOption>-g</compilerStartOption>
                </compilerStartOptions>
                <linkerStartOptions>
                    <linkerStartOption>-shared</linkerStartOption>
                    <linkerStartOption>-g</linkerStartOption>
                </linkerStartOptions>
                <sources>
                    ...
                </sources>
            </configuration>
        </plugin> 

本机maven插件在调用gcc时总是使用源文件的绝对路径。这也会导致调试符号中的绝对路径。列出调试符号的nm -l libfoo.so的输出如下:

代码语言:javascript
复制
0000797a T GetTickCount /home/myusername/projects/blabla/foo.c:3005

如您所见,源文件路径是绝对的,包括我的用户名和项目结构。我不想这样。如何将调试符号更改为相对路径名?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-24 13:23:15

好的,我发现gcc有一个-fdebug-prefix-map=oldPath=newPath选项,它能做我想做的事情。要从我的问题编译文件/home/myusername/projects/blabla/foo.c

代码语言:javascript
复制
gcc -fdebug-prefix-map=/home/myusername/projects/blabla=theNewPathInDebug -o foo.o foo.c
gcc -shared -o libfoo.so foo.o

然后调试符号路径将类似于(nm -l libfoo.so):

代码语言:javascript
复制
0000797a T GetTickCount theNewPathInDebug/foo.c:3005

然后,可以使用gdb路径替换来设置gdb的实际源文件位置。

为了让所有东西都在maven中工作,我的pom看起来是:

代码语言:javascript
复制
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>native-maven-plugin</artifactId>
    <extensions>true</extensions>
        <configuration>
            <workingDirectory></workingDirectory>
            <compilerStartOptions>
                <compilerStartOption>-g</compilerStartOption>
                <compilerStartOption>-fdebug-prefix-map=${project.build.directory}/extracted-c=theNewPathInDebug</compilerStartOption>
            </compilerStartOptions>
            <linkerStartOptions>
                <linkerStartOption>-shared</linkerStartOption>
                <linkerStartOption>-g</linkerStartOption>
            </linkerStartOptions>
            <sources>
                <source>
                    <directory>${project.build.directory}/extracted-c</directory>
                    <fileNames>
                        <fileName>foo.c</fileName>
                    </fileNames>
                </source>
            </sources>
        </configuration>
    </plugin> 

其中提取的-c是maven依赖插件提取C源文件/头文件的位置。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16733387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档