为什么在调试应用程序时必须/建议关闭所有编译器优化?
背景
我正在使用一个8位微控制器(OKI 411),它有15K可用代码存储空间用于中断服务程序+ ROM区域/窗口(const全局变量)+代码.我们差不多吃了大约13K,所以在调试过程中打开最大可能的优化非常诱人.
我在C中编写了PIC16F1947的代码.我使用以下代码:
代码的一部分处理来自PC的数据.我从PC发送的特定数据包是325字节.此数据包如下所示:
data: 0, 64, 1, 0, 255, 255, 255, ... (all 255) ..., 255, 1
index: 0 1 2 3 4 5 6 323 324
Run Code Online (Sandbox Code Playgroud)
数据包的内容显示为8位十进制值(8位无符号整数).微商店将其存储在以下阵列中unsigned char
:
unsigned char _command_mgr_buff[330];
Run Code Online (Sandbox Code Playgroud)
unsigned char
是PIC16F的8位无符号整数.
分组的最后一个字节,即索引324,是分组的校验和.它是索引1到323的总和,包括1和323.计算此校验和的PC代码(在C#中)如下:
allCertPages[324] = 0;
for (int i = 1; i <= 323; i++)
{
allCertPages[324] += allCertPages[i];
}
Run Code Online (Sandbox Code Playgroud)
allCertPages
是一个byte[]
.
微必须验证校验和确实是从PC传递的值.这是我为PIC16F编写的验证码,包括一些调试信息:
param0 = _command_mgr_buff[324]; // param0 is unsigned int, 16 bit
param1 = _command_mgr_buff[324]; // param1 is …
Run Code Online (Sandbox Code Playgroud) 是否可以按照声明方式在UI中显示PropertyGrid项?我发现它们首先按CategoryAttribute排序,然后按DisplayName属性按升序排序.
我正在使用Visual Studio 2010 Ultimate的.NET 3.5版.
编辑
该应用程序是一个WPF应用程序.
QThread::terminate()
文档声明不鼓励通过调用此函数来终止线程.
在我的程序中,我需要在完成执行之前终止一个线程.线程正在执行一些繁重的计算,我希望用户有控制权来停止计算.
我怎么能这样做而不是打电话QThread::terminate()
?
我有以下格式的两个日期:
开课日期= 2009年10月30日
结束日期= 2009年11月30日
如何用PHP来计算这两个日期之间的秒数?
我正在寻找一个winapi
允许我更改当前登录用户密码的功能.在我的情况下,我知道登录用户的当前密码.我使用Windows 7旗舰版.
谢谢.
背景
背景看起来很奇怪,但我将描述它以便澄清.我的个人家用电脑被几个用户(爸爸,姐妹,表兄弟等)使用.我是PC的唯一管理员.所有其他人都是标准用户.所有用户帐户都受密码保护.
我不喜欢其他人使用我的帐户,因为他们搞乱任何事情.我总是从我的帐户安装所有软件,并对PC进行故障排除.当我离开我的电脑数周时,可能是其他一些用户需要安装软件,或做一些需要管理权的事情.出于这个原因,他们可能需要使用我的帐户.可能存在紧急情况,我必须允许用户通过提供帐户密码登录我的帐户.
我最近遇到了这种情况.在离开我的电脑很长一段时间之前,我将常规密码更改为其他密码.当我到达我的电脑时,我会再次改变它.
所以我想写一个小程序,每次有人登录我的帐户时都会运行.该程序只会将当前密码更改为我只知道的其他密码.在这种情况下,如果有人登录我的帐户,安装一些东西,注销,并且在密码更改时无法重新登录.
假设我将帐户的密码设置为abcd
.当有人登录时,程序会将其更改为abcde
.下次可能是abc123
等等.
我正在使用Windows 7 Ultimate 32位上的Qt 4.7编写GUI应用程序.我想让用户从主菜单中更改GUI样式.可以从菜单中选择几个QStyles(QCDEStyle,QWindowsStyle,QCleanlooksStyle等),我用它QApplication::setStyle()
来设置新样式.
我想有一个选项可以返回到Windows 7的默认样式.默认样式,我的意思是QApplication::style()
在明确使用任何样式之前使用返回的样式QApplication::setStyle()
.以下是不起作用的尝试:
QStyle *default_style;
// During initialization of QMainWindow
default_style = QApplication::style();
// When default style is chosen from main menu
QApplication::setStyle(default_style);
Run Code Online (Sandbox Code Playgroud)
以上将无法工作,因为QApplication::setStyle()
取得对象的所有权并删除以前QStyle*
.
如何将QApplication
样式更改为默认样式?谢谢.
我正在使用带有TFS的Visual Studio 2010 Ultimate.我不喜欢TFS的默认diff程序.
是否可以将默认差异程序更改为其他内容,如WinMerge?
我正在使用基于Qt 4.7.0(32位)的Qt Creator 2.0.1.操作系统是Windows 7旗舰版(32位).
我想使用以下函数调用重新启动Windows:
ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_SYSTEM |
SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY);
Run Code Online (Sandbox Code Playgroud)
我在源代码中添加了windows.h和reason.h,并在*.pro文件的LIBS部分添加了libuser32.
在编译代码之后,Qt Creator会发出错误说明SHTDN_REASON_MAJOR_SYSTEM
并且SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY
未在范围中定义.
我查看了mingw附带的reason.h文件.我发现#define
s里面是#if
:
#if (_WIN32_WINNT >= 0x0501)
Run Code Online (Sandbox Code Playgroud)
我调查的值_WIN32_WINNT
似乎是1024(0x400).
我知道这代表某种版本号,那些#define
应该在特定版本之后编译.但是为什么_WIN32_WINNT
Windows 7上这么低?我怎么用那些#define
?我不想把直接值代替SHTDN_REASON_MAJOR_SYSTEM
和SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY
.
我公司的一些人正在争论它.给定源代码和编译器(使用相同的标志/开关编译),编译器是否可能创建在不同操作系统中具有不同行为的二进制文件?
具体来说,我们有一个必须在Windows XP和Windows 7中运行的C#项目,都是32位.编译器是VS 2008.有一个解决方案文件(*.sln),它包含我们用来构建软件的所有必要文件,程序集,项目等.
是否有可能如果代码(相同的解决方案文件)在VS 2008中编译(具有相同的标志/开关,因为它是相同的解决方案文件)在XP中将生成一个二进制文件,其行为不同于 Windows中的编译二进制文件7?
根据行为差异我的意思是,在特定情况下......
该项目太庞大,无法提出一个小测试项目.我想知道上述情况是什么情况(如果有的话).
如果我在Visual C++ 2017中构建并运行以下程序:
#include <stdio.h>
int main()
{
int a[3] = { 0 };
for (int i = 0; i < 3; i++)
{
printf("%llu %u %p\n", a + i, a + i, a + i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我看到输出如下:
31519768560270096 7338768 000F1055
31519785740139284 7338772 000F1055
31519802920008472 7338776 000F1055
Run Code Online (Sandbox Code Playgroud)
我无法联想到.
为什么输出%llu
如此不同?sizeof(int)
在我的平台上是4.
为什么输出%p
都相同?它们是不同变量的地址.
只有输出%u
似乎是一致的 - 3个数组元素的连续内存位置,每个数组元素有4个字节.但这些输出既不匹配%llu
也不匹配%p
.