- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个小的 Perl 程序。程序加载一个模块。模块加载一个带有 XSLoader 的 .so 文件.这个 Perl 在 Linux 上运行,是用 gcc 和 -DDEBUGGING
构建的。 ,然后是 .so 文件。我可以重新编译。
执行 Perl 程序时,如何跟踪 .so 文件中的 C 函数?我需要按照它们运行的顺序知道函数的名称。也有函数参数会很好。
最佳答案
这是一个使用 gdb
进入共享库的示例。我正在使用 Linux(Ubuntu 18.04)。
我首先使用 perlbrew
安装了 Perl 的调试版本:
perlbrew install perl-5.26.2 --as=5.26.2d -DDEBUGGING
perlbrew use 5.26.2d
/home/hakon/mylib
中创建了一个共享库(为了测试目的而精简到非常少的内容):
perlxstut
中的示例 3:
#include <math.h>
#include "myclib.h"
double my_clib_function( double arg ) {
if (arg > 0.0) {
arg = floor(arg + 0.5);
} else if (arg < 0.0) {
arg = ceil(arg - 0.5);
} else {
arg = 0.0;
}
return arg;
}
double my_clib_function( double arg );
libmylib.so
:
gcc -g -c -fpic mylib.c
gcc -g -shared -o libmylib.so mylib.o
libmylib.so
开关设置为
-g
来在
gcc
中包含调试符号。
.xs
文件来调用共享库函数(在文件夹
/home/hakon/myxstest
中):
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "myclib.h"
MODULE = Mytest PACKAGE = Mytest
void
wrapper(arg)
double arg
CODE:
arg = my_clib_function( arg);
OUTPUT:
arg
package Mytest;
use 5.022001;
use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw();
our $VERSION = '0.01';
require XSLoader;
XSLoader::load('Mytest', $VERSION);
ExtUtils::MakeMaker
这样的构建系统来编译
use 5.022001;
use ExtUtils::MakeMaker;
my $lib_dir = '/home/hakon/mylib';
WriteMakefile(
NAME => 'Mytest',
VERSION_FROM => 'lib/Mytest.pm',
PREREQ_PM => {},
ABSTRACT_FROM => 'lib/Mytest.pm',
AUTHOR => 'Håkon Hægland <xxx.yyy@gmail.com>',
LIBS => ["-L$lib_dir -lmylib"],
INC => "-I. -I$lib_dir",
OPTIMIZE => '-g',
);
Mytest.so
请求调试符号(对于
OPTIMIZE => '-g'
共享对象),并通过使用
libmylib.so
的
LIBS
参数来告知另一个共享库
WriteMakefile()
的位置。
perl Makefile.PL
make
#! /usr/bin/env perl
use feature qw(say);
use strict;
use warnings;
use ExtUtils::testlib;
use Mytest;
my $res = 3.5;
Mytest::wrapper( $res ); # <-- Warning: modifies $res in place !
say $res;
gdb
上运行
p.pl
:
$ gdb -q --args perl p.pl
Reading symbols from perl...done.
(gdb) break Mytest.xs:14
No source file named Mytest.xs.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (Mytest.xs:14) pending.
(gdb) run
Starting program: /home/hakon/perlbrew/perls/5.26.2d/bin/perl p.pl
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, XS_Mytest_wrapper (cv=0x555555bdc860) at Mytest.xs:14
14 arg = my_clib_function( arg);
(gdb) p arg
$1 = 3.5
(gdb) s
my_clib_function (arg=3.5) at mylib.c:5
5 if (arg > 0.0) {
关于perl - 如何跟踪 XS .so 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50643536/
“用 Haskell 进行函数式思考”中的练习之一是使用融合定律使程序更加高效。我在尝试复制答案时遇到了一些麻烦。 部分计算要求您将 maximum (xs++ map (x+) xs) 转换为 ma
我正在使用 XML 规范,它定义了一个“类型”“日期”,即: date: A union of xs:date, xs:gYearMonth, xs:gYear 以上数据类型来自W3C XML Sch
我很好奇替换是否正确 ... ... 与 ... ... 用javascript? 我所需要的只是隐藏第二个 div 并正确地通过 javascript 显示第一个 div 的 100%。实际完成的操
我有以下定义 Inductive subseq : list nat -> list nat -> Prop := | empty_subseq : subseq [] [] | add_right
可以在 xs:sequence 中使用 xs:choice 元素, ... 但不在 xs:all 内。这是为什么?这在解析 xml 时会产生一些歧义吗? 最佳答案 这只能由 XML Sch
我有一个场景,我需要一个 xsd,用于验证一些没有共同点的 xml。例如, xml1: .. .. .. xml2: .. .. 我需要一个通用的 xsd,以便验证具有“require
我必须与 WSDL 包含以下复杂类型的 Web 服务通信:
本文整理了Java中org.geotools.xs.XS.getInstance()方法的一些代码示例,展示了XS.getInstance()的具体用法。这些代码示例主要来源于Github/Stack
我正在尝试使用 HANA XS Javascript 实现简单的产品目录。目录的页面应该在服务器端呈现。 如何根据从 HANA 数据库读取的数据处理“动态”URL?例如,http:///myapp/s
当前在 Talend 上运行代码并抛出此错误 net.sf.saxon.trans.XPathException: Cannot compare xs:string to xs:integer at
split :: [a] -> Int -> ([a], [a]) split [xs] n = (take n [xs], drop n [xs]) 如果我将变量指定为 xs 而不是 [xs
免责声明:在 perlmonks 询问. 我希望我正确地描述和描述了我的问题......在 XS 中,我试图将回调发送到外部库的函数,其中回调具有 Perl 特定的函数。 XSUB 作为函数指针传递给
我对 XML Schema 还是有点陌生,我正在尝试在 Relax NG Compact 中做一些看起来像这样的事情: test = element test{ element A {text},
我有一个类似于以下的文档类型: abc true abc 以下文档在语义上与前面的文档相同: true abc
我正在尝试使用 xs:choice 元素,但是在验证 XSD 文件时,我收到一个错误,我认为它与 xs:choice 元素有关。我已经搜索了很多这个问题,找到了一些类似的问题,但没有一个给我我正在寻找
我想定义一个复杂类型,其中包含可能存在或不存在的元素,并且还允许其他未定义的元素,所以我有这样的东西: 我不想使用 强制执行订单所以我想改变至 但随后 不允许。有
如果 Reverse :: [k] -> [k]是一个类型族,那么 Haskell 无法判断 (Reverse (Reverse xs)) ~ xs .有没有办法让类型系统知道这一点而无需任何运行时成
我已经开始创建 XSD,并在 xs:integer 和 xs:int 的几个示例中找到了。 xs:integer 和 xs:int 之间有什么区别?我什么时候应该使用xs:integer?我什么时候应
我正在使用 Apache CXF 从 java 类创建自下而上的 Web 服务 在 java 类中,我将 java.util.Date 和 java.util.Calendar 用于两个字段 当 WS
我正在使用 Bootstrap 3 设计一个网站。我遇到过网格系统没有按预期工作的情况。 我试图将类设置为 visible-xs-6 col-xs-offset-3 最后一行中的 HTML5 Logo
我是一名优秀的程序员,十分优秀!