如果在最初抛出函数之外捕获异常,则会失去对本地堆栈的访问权限.因此,无法检查可能导致异常的变量值.
有没有办法在import pdb; pdb.set_trace()每次抛出异常来检查本地堆栈时自动启动进入调试器()?
我来自Matlab背景,所以我习惯了一个分析器,它可以描述每一行而不仅仅是每个函数都像gprof或callgrind.有没有C类似功能的探查器?
谢谢!

我想在Linux下编译一个非常基本的hello世界级Cuda程序.我有三个文件:
你能给我写一个简单的Makefile来用nvcc和g ++编译吗?
谢谢,
Gabor
今天我__local向我的内核添加了四个变量以转储中间结果.但是只需将四个以上的变量添加到内核的签名中并添加相应的内核参数,就会将内核的所有输出都呈现为"0".没有cl函数返回错误代码.
我进一步尝试只添加两个较小的变量之一.如果我只添加其中一个,它可以工作,但如果我添加它们,它就会崩溃.
那么OpenCL的这种行为是否意味着我分配给了大量__local内存?我怎么知道,我可以__local使用多少内存?
我想绘制一条从一个明确定义的点到另一个定义点的线,然后将其转换为图像矩阵,在其上使用高斯滤波器进行平滑.为此,我使用函数line并getframe绘制一条线并捕获图像中的图形窗口,但getframe速度非常慢且不太可靠.我注意到它在计算机锁定时没有捕获任何内容,并且out of memory在170次执行后我收到错误.
我的问题是:
getframe我可以使用替代品吗?这是一个最小的代码示例:
figure1=line([30 35] ,[200 60]);
F= getframe;
hsize=40; sigma=20;
h = fspecial('gaussian',hsize,sigma);
filteredImg = imfilter(double(F.cdata), h,256);
imshow(uint8(filteredImg));
Run Code Online (Sandbox Code Playgroud)
[更新]
高性能Mark的想法linspace看起来非常有前景,但我如何访问用linspace?计算的矩阵坐标?我尝试了以下代码,但它不起作用,因为我认为它应该.我认为这是一个非常简单和基本的MATLAB的东西,但我无法绕过它:
matrix=zeros(200,60);
diagonal=round([linspace(30,200,numSteps); linspace(35,60,numSteps)]);
matrix(diagonal(1,:), diagonal(2,:))=1;
imshow(matrix);
Run Code Online (Sandbox Code Playgroud) 我尝试传递一个结构的指针,该结构从函数'bar'返回给函数'foo_write'作为返回值.但是我得到'foo = POINTER(temp_foo)'行的错误消息'TypeError:必须是ctypes类型'.在ctypes在线帮助中,我发现'ctypes.POINTER'仅适用于ctypes类型.你知道另一种方式吗?你会推荐什么?
C:
typedef struct FOO_{
int i;
float *b1;
float (*w1)[];
}FOO;
foo *bar(int foo_parameter) {...
void foo_write(FOO *foo)
Run Code Online (Sandbox Code Playgroud)
Python与ctypes:
class foo(Structure):
_fields_=[("i",c_int),
("b1",POINTER(c_int)),
("w1",POINTER(c_float))]
temp_foo=foo(0,None,None)
foo = POINTER(temp_foo)
foo=myclib.bar(foo_parameter)
myclib.foo_write(foo)
Run Code Online (Sandbox Code Playgroud) 我仍在使用ctypes在我的c代码的python接口上编写.今天我用python版本替换了我的文件读取功能,这是由其他人使用NumPy编写的.使用byref(p_data)调用'old'c版本,而p_data = PFloat()(见下文).main函数采用p_data.
旧文件阅读:
p_data=POINTER(c_float)
foo.read(filename,byref(p_data))
result=foo.pymain(p_data)
Run Code Online (Sandbox Code Playgroud)
另一方面,python文件读取函数返回NumPy数组.我现在的问题是:
如何将NumPy数组转换为POINTER(c_float)?
我用谷歌搜索,但只发现相反的方式:C数组通过ctypes访问为NumPy数组和我不理解的东西:C类型外部函数接口(numpy.ctypeslib)
[update] 更正了示例代码中的错误
这是我得到的错误的最小例子.如果我正确理解文档,这应该是有效的,但似乎我没有.
a={}
a['test1']=1
a['test2']=2
a['test3']=3
import scipy.io as io
io.savemat('temp',{'a':a})
b = io.loadmat('temp')
b['a'].keys()
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'keys'
Run Code Online (Sandbox Code Playgroud) 我找到了这个示例代码,我试图google什么(int (*)[])var1可以代表,但我没有得到有用的结果.
#include <unistd.h>
#include <stdlib.h>
int i(int n,int m,int var1[n][m]) {
return var1[0][0];
}
int example() {
int *var1 = malloc(100);
return i(10,10,(int (*)[])var1);
}
Run Code Online (Sandbox Code Playgroud)
通常我在C99中使用VLA,所以我习惯于:
#include <unistd.h>
#include <stdlib.h>
int i(int n,int m,int var1[n][m]) {
return var1[0][0];
}
int example() {
int var1[10][10];
return i(10,10,var1);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
和其他人的代码一起工作,我偶然发现了这个问题.那么numpy行为的解释是什么?
In [1]: import numpy as np
In [2]: foo = [False, False]
In [3]: print np.any(x == True for x in foo)
True # <- bad numpy!
In [4]: print np.all(x == True for x in foo)
True # <- bad numpy!
In [5]: print np.all(foo)
False # <- correct result
Run Code Online (Sandbox Code Playgroud)
ps我从这里得到了列表理解代码:检查列表是否只包含项目x