matlab下如何除错c函式 zz

Python014

matlab下如何除错c函式 zz,第1张

matlab下如何除错c函式 zz

double add(double x,double y){ return x + y} MEX档案介面函式 void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[]) {double *adouble b, cplhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL)a = mxGetPr(plhs[0])b = *(mxGetPr(prhs[0]))c = *(mxGetPr(prhs[1]))*a = add(b, c)}以上已经建立好了add.c档案啦。然后进行以下步骤: 步1、在matlab命令列 mex -setup,然后选择编译器,我们这选择microsoft的VC++ 6.0. 步2、在matlab命令列输入 mex add.c -output add,这时会产生连结add.mexw32。 如果你是要一个除错版本,就在命令列中加上-g开关。如果你对C/C++编译器还有些引数要指定,可以将 /bin/win32/mexopts/msvc60opts.bat拷贝到当前目录下修改之,再加上-f 就行了。例如:我们这用mex add.c -g -output add,这里除了产生add.mexw32,还有add.ilk,add.pdb。 步3、在cmd下键入msdev 目录\add.mexw32。现在,vc打开了,开启你要除错的C/C++档案,这个例子中就是add.c,设定好断点,按Alt+F7,在 Debug表单的Excuitable for debug session中键入D:\Program Files\MATLAB71\bin\win32\matlab.exe(matlab的安装目录)就行了。按F5,MATLAB就被开启,好,可以工作了,在命令列输入add(1,2)然后程式就会在add.c设定了断点的地方中断。这时只有在VC下除错就行。^_^

matlab 如何打出ierfc函式

绘制自定义函式的方法至少有两种:一种用plot函式,一种用fplot函式。以下以y=3x^3-2x+3(0<=x<=5)为例分别介绍这两种方法。

方法一:定义向量x和向量y,然后plot画图即可,具体程式码:

x=0:0.01:5

y=3.*x.^3-2.*x+3

plot(x,y)

结果:

方法二:定义匿名函式f,然后用fplot画图,具体程式码:

f=@(x) 3*x^3-2*x+3

fplot(f,[0,5])

结果:

windows下qt4中如何呼叫C函式

应该有很多方法,以下只是其中的一种,用于计算该函式被呼叫次数

void fun()

{

static int count = 0

count++

cout<<count

}

go语言如何呼叫c函式

直接嵌入c原始码到go程式码里面

package main

/*

#include <stdio.h>

void myhello(int i) {

printf("Hello C: %d\n", i)

}

*/

import "C"

import "fmt"

func main() {

C.myhello(C.int(12))

fmt.Println("Hello Go")

}

需要注意的是C程式码必须放在注释里面

import "C"语句和前面的C程式码之间不能有空行

执行结果

$ go build main.go &&./main

Hello C: 12

Hello Go

分开c程式码到单独档案

嵌在一起程式码结构不是很好看,很多人包括我,还是喜欢把两个分开,放在不同的档案里面,显得干净,go原始档里面是go的原始码,c原始档里面是c的原始码。

$ ls

hello.c hello.h main.go

$ cat hello.h

void hello(int)

$ cat hello.c

#include <stdio.h>

void hello(int i) {

printf("Hello C: %d\n", i)

}

$ cat main.go

package main

#include "hello.h"

import "C"

import "fmt"

func main() {

C.hello(C.int(12))

fmt.Println("Hello Go")

}

编译执行

$ go build &&./main

Hello C: 12

Hello Go

编译成库档案

如果c档案比较多,最好还是能够编译成一个独立的库档案,然后go来呼叫库。

$ find mylib main

mylib

mylib/hello.h

mylib/hello.c

main

main/main.go

编译库档案

$ cd mylib

# g -fPIC -shared -o libhello.so hello.c

编译go程式

$ cd main

$ cat main.go

package main

#cgo CFLAGS: -I../mylib

#cgo LDFLAGS: -L../mylib -lhello

#include "hello.h"

import "C"

import "fmt"

func main() {

C.hello(C.int(12))

fmt.Println("Hello Go")

}

$ go build main.go

执行

$ export LD_LIBRARY_PATH=../mylib

$ ./main

Hello C: 12

Hello Go

在我们的例子中,库档案是编译成动态库的,main程式连结的时候也是采用的动态库

$ ldd main

linux-vdso.so.1 =>(0x00007fffc7968000)

libhello.so =>../mylib/libhello.so (0x00007f513684c000)

libpthread.so.0 =>/lib64/libpthread.so.0 (0x00007f5136614000)

libc.so.6 =>/lib64/libc.so.6 (0x00007f5136253000)

/lib64/ld-linux-x86-64.so.2 (0x000055d819227000)

理论上讲也是可以编译成整个一静态连结的可执行程式,由于我的机器上缺少静态连结的系统库,比如libc.a,所以只能编译成动态连结。

如何除错 Navicat for PostgreSQL 函式

Navicat for PostgreSQL 触发器常规属性:

限制:勾选此项,建立一个限制触发器。

触发器型别:可供选择的触发器型别有 Table 或 View。需要注意的是,适用于PostgreSQL 9.0 或以上版本。

表名或检视名:选择表或检视。

BEFORE:当尝试在行操作前,可以指定触发触发器。

AFTER:当尝试在行操作后,可以指定触发触发器。

INSTEAD OF:指定触发触发器来代替尝试在行操作。

INSERT/UPDATE/DELETE:选择启用触发器的事件。

插入:每当一个新行插入表,触发器会被启用。

更新:每当修改一个行,触发器会被启用。

删除:每当从表删除一个行,触发器会被启用。

TRUNCATE:触发器定义为触发 TRUNCATE。

更新栏位:指定一个列列表。如果至少一个列在 UPDATE 命令提及为目标,触发器将会触发。

STATEMENT:指定触发器过程在每个 SQL 语句触发一次。

ROW:指定触发器过程在触发器事件影响一行时触发一次。

当:指定一个布林值 WHEN 条件,测试触发器是否应该被触发,该功能支援 PostgreSQL 9.0 或以上版本。

触发函式模式和触发函式:使用者提供的函式,被宣告为没有引数及返回型别触发器,当触发器触发时执行。

函式引数:一个当触发器执行时,指供给函式的可选逗号分隔引数列表,引数是文字字串常数。简单的名和数字常数可以写在这里,但它们都将被转换为字串。请检查触发函式的实施语言描述,关于如何可访问触发器引数,它可能和正常函式引数不同。

Navicat for PostgreSQL 触发器限制:

可搁置:可搁置限制。

最初立即:在每个语句后检查限制。

最初搁置:只在事务结束时检查限制。

参考表模式和参考表名:限制参考表的模式和名。

【求助】matlab如何求解sinc函式的反函式

for k=1:length(y)

f=@(x)y(k)*x-sin(x)

ezplot(f)%画图,观察函式零点在x0(k)附近

z(k)=fzero(f,x0(k))%呼叫fzero函式找零点

endsxf2012(站内联络TA)%%以y为一个数据为例,假设y值为y0,则令

%f=@(x)y0-sin(x)/x%%用命令:%ezplot(f)

%%画图,观察函式,随便找零点附近的一个座标x0

%% 则,要求的零点为

%z=fzero(f,x0)%呼叫fzero函式找零点

%比如y0=0.6,通过令

f=@(x)0.6-sin(x)/x%画图ezplot(f)hold onplot(,,'r')

%观察知,零点在-2和2附近,用

z1=fzero(f,-2)

%计算得零点为x=-1.66

z2=fzero(f,2)

%计算得零点为x=1.66

这是y=sinx/x的曲线图。我的情况是y的值是已知的,我需要把x的全部值求出来,即想通过反函式来求得。但是问题是,y=1时x是一个值,但y=0.8是两个值,y=0.1就是许多值。

这是y=sinx/x的曲线图。我的情况是y的值是已知的,我需要把x的全部值求出来,即想通过反函式来求得。但是 ... 在你画的区间上,函式不是单调的,所以其反函式不存在的,或者说是个多值函式。

51微控制器汇编如何呼叫C函式?

先宣告,后调出。

若C语言函式名为ABC,汇编的入口符号为_ABC。

例:CALL _ABC ,就呼叫的了ABC涵数。

至于如何宣告,如何传函式引数,就要查编译器的使用说明了。

我也没这么做过,一般是高阶语言呼叫低阶语言,只是一个建议。

matlab 的plotroc函式怎么呼叫

matlab 的plotroc函式主要是绘制ROC曲线。

ROC曲线是通用的分类器评价工具,matlab函式中自带了绘制该曲线的函式plotroc。

plotroc函式的原型为:plotroc(targets, outputs)

其中引数targets是一个矩阵,代表测试集,每一列表示一个测试样本的标签

如果有两类样本,比如第1,2,5个样本属于第1类,第3,4,6个样本属于第2类....则targets应为:

1 1 0 0 1 0 ...

0 0 1 1 0 1 ...

如果只有一类样本,包含了负样本,则只要一行,用1表示正样本,0表示负样本即可,比如targets为:

1 0 1 1 0 0 0 0 1 ...

引数outputs也是一个矩阵,代表分类结果,同样每一列表示一个测试样本的分类结果

同样如果有两类样本,则应有两个分类器,每一列记录了每个测试样本在两个分类器上的得分,此时outputs为:

0.8 0.85 0.2 0.75 0.21 ...

0.8 0.01 0.9 0.23 0.67 ...

如果只有一类,则outputs只有一行,如:

0.8 0.6 0.8 0.7 0.05 0.3 0.03 ...

注意,得分必须在[0, 1]的区间内,可以自己规约一下。

我们将相应的测试标签targets和对应的分类得分outputs输入plotroc中就可以绘制出相应的ROC曲线了。

有人问起,我也就在网上搜了一下,发现还有很多人不会用,写下来以供参考,欢迎指正。

如何除错Android SO中的init函式

1.Root装置

Root许可权下才能快乐除错。

使用市面上的各种Root师傅工具。

2.连线装置

将装置开启除错模式在开发者选项里。

将IDA安装目录中dbgsrv资料夹下的android_server推送到装置系统目录并赋可执行许可权。在高于IDA6.6版本才能除错高版本android,此时除错低版本Android SO时,需要使用的是android_nonpipe。

在PC端输入命令:

adb shell su

adb shell android_server的路径/android_server

保持上面视窗,在命令列视窗进行埠转发:

adb forward tcp:23946 tcp:23946

为什么是23946呢,IDA和push进装置的android_server预设用都用23946埠进行通讯。当然可以修改。

3.开启IDA

附加或者启动程序的过程不再多言。

4.定位INIT函式

比较便捷的方法是找一份与装置同系统版本号的android原始码。解析执行SO档案的地方在linker.c(cpp)中。

因为不同版本有差异,我就不上图了。

高版本时在do_dlopen()下的CallConstructors()里面,但是编译系统时往往将其和find_library融合在其父函式中,查询时需注意。一个简便方法是原始码中搜索“INIT”四个字.

先将装置中的linker pull出来用IDA分析来确定呼叫INIT的具 *** 置。

因为linker在Android程序中载入非常早,所以它在IDA中的地址可以不用修正直接拿来用。

5.下断在INIT

下断点后,执行Apk中触发载入该SO的功能。

正常情况下就能停在该SO的INIT前了。

如何在QT中写C函式?

/********MyButton.h*********/

#ifndef MYBUTTON_H_

#define MYBUTTON_H_

#include<iostream>

#include <QtGui/QPushButton>

#include <QtGui/QWidget>

class MyButton : public QPushButton

{

Q_OBJECT

public:

MyButton(const QString &text, QWidget * parent)

~MyButton()

public:

void setLed(int argc, char *argv[])

public slots:

void sendButtonText()

private:

signals:

void isClickButton(const QString &text)

}

#endif

[cpp] view plain copy

/**********MyButton.cpp************/

#include "MyButton.h"

extern "C"{

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/ioctl.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<ftl.h>

void MyButton::setLed(int argc, char *argv[]){

int on

int led_number

int fd

if (argc != 3 || sscanf(argv[1], "%d", &led_number) != 1 || sscanf(argv[2],"%d", &on) != 1 ||

on <0 || on >1 || led_number <0 || led_number >3) {

fprintf(stderr, "Usage:\n")

fprintf(stderr, "\t led led_number on|off\n")

fprintf(stderr, "Options:\n")

fprintf(stderr, "\t led_number from 0 to 3\n")

fprintf(stderr, "\t on 1 off 0\n")

exit(1)

}

fd = open("/dev/led", 0)

if (fd <0) {

perror("open device /dev/led")

exit(1)

}

ioctl(fd, on, led_number)

::close(fd)请注意,此处如果要呼叫C语言库中的close()一定要加上“::",否则程式将到当前类的作用域中寻找close()方法,导致不明错误。

}

}

MyButton::MyButton(const QString &text,QWidget *widget)

:QPushButton(text,widget)

{

connect(this,SIGNAL(clicked()),this,SLOT(sendButtonText()))

}

MyButton::~MyButton()

{

}

void MyButton::sendButtonText(){

emit isClickButton(this->text())

char open_1[]="1"

char open_2[]="1"

char open_3[]="1"

char *o1=open_1

char *o2=open_2

char *o3=open_3

char close_1[]="1"

char close_2[]="1"

char close_3[]="0"

char *c1=close_1

char *c2=close_2

char *c3=close_3

char *open[]={o1,o2,o3}

char *close[]={c1,c2,c3}

QString *str=new QString(this->text())

if((str->pare("mb1"))==0){

std::cout<<"mb1 is clicked!\n"

setLed(3,open)

}

if((str->pare("mb2"))==0){

std::cout<<"mb2 is clicked!\n"

setLed(3,close)

}

}