我将在ARM体系结构上测试一些低级代码.通常实验板上的实验非常复杂,所以我在想QEMU.
我想得到的是某种调试信息,如printfs或gdb.我知道这对于linux很简单,因为它实现了QEMU Integrator的设备驱动程序和gdb功能,但我不使用Linux.我还怀疑从Linux内核源代码中提取这种功能会很复杂.
我正在从一些已经实现其中一个功能的简单操作系统中搜索.你有什么建议吗?
我正在编写几个都有泛型类型参数的类,但是我需要重载这些类,因为在不同的场景中我需要不同数量的参数.基本上,我有
public class MyGenericClass<T> { ... }
public class MyGenericClass<T, K> { ... }
public class MyGenericClass<T, K, L> { ... }
// it could go on forever, but it won't...
Run Code Online (Sandbox Code Playgroud)
我希望它们都在同一个命名空间中,但每个类在一个源文件中.我该怎么命名这些文件?有最好的做法吗?
我一直在尝试使用nanoc来生成静态网站.我需要组织一个复杂的排列页面,我希望保持我的内容干燥.
包含或合并的概念在nanoc系统中如何工作?我已经阅读了文档,但我似乎找不到我想要的东西.
例如:如何获取两个部分内容项并将它们合并为一个新的内容项.
在staticmatic中,您可以在页面中执行以下操作.
= partial('partials/shared/navigation')
Run Code Online (Sandbox Code Playgroud)
类似的约定如何在nanoc中起作用?
我创建了两个RadioButton(重量和高度).我会在两个类别之间切换.但是它们共享相同的ListBox控制器(listBox1和listBox2).
有没有什么好方法可以更简单地清除所有ListBox项?我找不到ListBox的removeAll().我不喜欢我在这里发布的复杂的多行样式.
private void Weight_Click(object sender, RoutedEventArgs e)
{
// switch between the radioButton "Weith" and "Height"
// Clear all the items first
listBox1.Items.Remove("foot");
listBox1.Items.Remove("inch");
listBox1.Items.Remove("meter");
listBox2.Items.Remove("foot");
listBox2.Items.Remove("inch");
listBox2.Items.Remove("meter");
// Add source units items for listBox1
listBox1.Items.Add("kilogram");
listBox1.Items.Add("pound");
// Add target units items for listBox2
listBox2.Items.Add("kilogram");
listBox2.Items.Add("pound");
}
private void Height_Click(object sender, RoutedEventArgs e)
{
// switch between the radioButton "Weith" and "Height"
// Clear all the items first
listBox1.Items.Remove("kilogram");
listBox1.Items.Remove("pound");
listBox2.Items.Remove("kilogram");
listBox2.Items.Remove("pound");
// Add source units items for listBox1 …
Run Code Online (Sandbox Code Playgroud) 我正在写一个矩阵类,并重载了函数调用操作符两次.矩阵的核心是2D双阵列.我正在使用从Windows控制台调用的MinGW GCC编译器.
第一个重载意味着从数组返回一个double(用于查看元素).第二个重载意味着返回对数组中某个位置的引用(用于更改该位置的数据).
double operator()(int row, int col) const ; //allows view of element
double &operator()(int row, int col); //allows assignment of element
Run Code Online (Sandbox Code Playgroud)
我正在编写测试例程,并发现"查看"超载永远不会被调用.由于某种原因,当使用以下printf()语句时,编译器"默认"调用返回引用的重载.
fprintf(outp, "%6.2f\t", testMatD(i,j));
Run Code Online (Sandbox Code Playgroud)
我明白,我通过编写自己的矩阵类而不使用向量和使用CI/O函数进行测试来侮辱众神.我将在来世彻底受到惩罚,不需要在这里做.
最后,我想知道这里发生了什么,以及如何解决它.我更喜欢使用更清洁的运算符重载而不是成员函数.
有任何想法吗?
矩阵类:省略了不相关的代码.
class Matrix
{
public:
double getElement(int row, int col)const; //returns the element at row,col
//operator overloads
double operator()(int row, int col) const ; //allows view of element
double &operator()(int row, int col); //allows assignment of element
private:
//data members
double **array; //pointer to data array
};
double Matrix::getElement(int row, …
Run Code Online (Sandbox Code Playgroud) 由于 Microsoft 在其非 DLL 版本的运行时中实现堆的方式,从 DLL 返回 C++ 对象可能会导致问题:
// dll.h
DLL_EXPORT std::string somefunc();
Run Code Online (Sandbox Code Playgroud)
和:
// app.c - not part of DLL but in the main executable
void doit()
{
std::string str(somefunc());
}
Run Code Online (Sandbox Code Playgroud)
如果 DLL 和 EXE 都是使用多线程 DLL 运行时库构建的,则上述代码运行良好。
但是,如果 DLL 和 EXE 是在没有 DLL 运行时库(单线程或多线程版本)的情况下构建的,则上述代码将失败(使用调试运行时,由于断言_CrtIsValidHeapPointer(pUserData)
失败,代码立即中止;使用非调试运行时堆被破坏,程序最终在其他地方失败)。
两个问题:
更新2:
好吧,我已经将我的解决方法重构为一个单独的函数.这样,虽然它仍然不理想(特别是因为我必须在函数外部释放函数内部分配的内存),它确实能够更普遍地使用它.我仍然希望有一个更优化和更优雅的解决方案...
更新:
好的,所以问题的原因已经确定,但我仍然对解决方案感到茫然.
我试图找出一种(简单/有效)方法来修改结构中数组的几个字节.我当前的解决方法是动态分配相同大小的缓冲区,复制数组,对缓冲区进行更改,使用缓冲区代替数组,然后释放缓冲区似乎过多且不太理想.如果我必须这样做,我也可以在结构中放入两个数组并将它们初始化为相同的数据,然后在第二个数据中进行更改.我的目标是减少内存占用(仅存储原始阵列和修改后的阵列之间的差异)和手动工作量(自动修补阵列).
原帖:
我昨晚编写的一个程序工作得很好,但是当我今天重构它以使其更具可扩展性时,我最终遇到了问题.
原始版本有一个硬编码的字节数组.经过一些处理后,一些字节被写入数组,然后进行了一些处理.
为了避免对模式进行硬编码,我将数组放在一个结构中,以便我可以添加一些相关数据并创建它们的数组.但是现在,我无法在结构中写入数组.这是一个伪代码示例:
main() {
char pattern[]="\x32\x33\x12\x13\xba\xbb";
PrintData(pattern);
pattern[2]='\x65';
PrintData(pattern);
}
Run Code Online (Sandbox Code Playgroud)
那一个有效,但这个没有:
struct ENTRY {
char* pattern;
int somenum;
};
main() {
ENTRY Entries[] = {
{"\x32\x33\x12\x13\xba\xbb\x9a\xbc", 44}
, {"\x12\x34\x56\x78", 555}
};
PrintData(Entries[0].pattern);
Entries[0].pattern[2]='\x65'; //0xC0000005 exception!!! :(
PrintData(Entries[0].pattern);
}
Run Code Online (Sandbox Code Playgroud)
第二个版本导致分配上的访问冲突异常.我确定这是因为第二个版本以不同的方式分配内存,但是我开始变得头疼,试图弄清楚什么或如何解决这个问题.(我目前正在通过动态分配与模式数组大小相同的缓冲区,将模式复制到新缓冲区,对缓冲区进行更改,使用缓冲区代替模式数组,然后解决它试图记住释放临时缓冲区.)
(具体来说,原始版本将模式数组 - + offset-转换为DWORD*并为其分配一个DWORD常量来覆盖四个目标字节.新版本不能这样做,因为源的长度未知 - 可能不是四个字节 - 所以它使用memcpy.我已经检查并重新检查并确保指向memcpy的指针是正确的,但我仍然遇到访问冲突.我使用memcpy而不是str(n)cpy因为我是使用普通字符(作为字节数组),而不是Unicode字符并忽略空终止符.使用上面的赋值会导致同样的问题.)
有任何想法吗?
我正在开发一个非常典型的Web应用程序.用户体验的主要组成部分是网站所有者将在其首页上安装的小部件.每次加载首页时,小部件都会与我们的服务器通信并显示一些返回的数据.
因此,此Web应用程序有两个组件:
以前我们用PHP运行所有这些.现在我们正在尝试使用Rails,这对于#1(前端UI)来说非常棒.问题是如何高效地执行#2,即小部件信息的后台服务.显然,这比前端负载要高得多,因为每次首页加载到我们客户的网站上时都会调用它.
我可以看到两种明显的方法:
A. 并行堆栈:建立一个使用除rails之外的其他东西的并行堆栈(例如我们旧的基于PHP的方法),但访问与前端相同的数据库
B. Rails Metal:使用Rails Metal/Rack绕过Rails路由机制,但是在Rails应用程序中保持api调用响应者
我的主要问题:
但是也...
和...
提前感谢任何见解.
我在Ubuntu 9.10,Rails 2.3.4,ruby-ee 2010.01,PostgreSQL 8.4.2上有站点运行rails应用程序和resque worker在生产模式下运行
工人不断提出错误:PGError:服务器意外关闭了连接.
我最好的猜测是主resque进程建立与db的连接(例如authlogic在使用User.acts_as_authentic时这样做),同时加载rails app类,并且该连接在fork()ed进程中被破坏(退出?),所以下一个分叉孩子们得到了一些破碎的全局ActiveRecord :: Base.connection
我可以使用此示例代码重现非常类似的行为,模拟resque worker中的fork/processing.(AFAIK,libpq的用户建议无论如何都要在forked进程中重新创建连接,否则它不安全)
但是,奇怪的是,当我使用pgbouncer或pgpool-II而不是直接的pgsql连接时,不会出现这样的错误.
那么,问题是我应该在哪里以及如何挖掘以找出为什么它被破坏以进行普通连接并且正在使用连接池?还是合理的解决方法?
有没有类似通配符指令来捕获所有可能的错误并在单个自定义错误页面中处理它们?
ErrorDocument 404 /error.php?code=404
ErrorDocument 403 /error.php?code=403
...
ErrorDocument NNN /error.php?code=NNN #possible use of RegExp?
Run Code Online (Sandbox Code Playgroud)
我知道我可能不会在这里处理很多自定义错误页面,但我对此很好奇.