我只是想用这个简单的代码获取最后一个错误的文本:
#include <cstdio>
#include <string>
#include <windows.h>
int main(){
char err[256];
memset(err, 0, 256);
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err, 255, NULL);
wprintf(L"%s\n", err); // just for the safe case
puts(err);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
FormatMessage()尝试可能会写一些类似的东西No error,但我得到:????????? ????°??在WINE 中,??????? ????°?? ?????°???在WinXP下在VirtualBox 中。
我检查了我的每一个想法:1)在一个例子中,出于某种原因,使用了 a wchar_t,所以我尝试创建一个wchar_ts缓冲区,并将其转换为FormatMessage (否则构建失败cannot convert ‘wchar_t*’ to ‘LPSTR {aka char*}’ for argument ‘5’),2)然后我想,也许编码与 GNU/Linux 不同,所以我将 WinXP …
关于函数局部变量的观察点通常会在函数返回时被删除,并显示消息«Watchpoint 7已删除,因为程序已将块保留在»中.插图:
struct mystruct{
int a, b, c;
};
void MyFunc(){
mystruct obj;
obj.a = 2;
}
int main(){
MyFunc();
}
Run Code Online (Sandbox Code Playgroud)
gdb会话示例
(gdb) b 7
Breakpoint 1 at 0x4004f1: file /tmp/test2.cpp, line 7.
(gdb) r
Starting program: /tmp/test2
Breakpoint 1, MyFunc () at /tmp/test2.cpp:7
7 obj.a = 2;
(gdb) wa obj
Hardware watchpoint 2: obj
(gdb) c
Continuing.
Hardware watchpoint 2: obj
Old value = {a = 4195600, b = 0, c = 4195328}
New value = {a = 2, …Run Code Online (Sandbox Code Playgroud) 显然不是最流行的情况,但我有许多提交,我想在其消息中追加一行Reviewed-by: user<mail>。
到目前为止,我只发现这个命令对我来说失败了Invalid line: 10: Reviewed-by: User <mail>
GIT_EDITOR='git interpret-trailers --trailer "Reviewed-by: User <mail>" --in-place' git rebase -i HEAD~8
Run Code Online (Sandbox Code Playgroud)
我也在IRC上问过,没有结果。
欢迎任何其他建议。
我正在尝试检测某些函数中的堆栈溢出,并希望将观察点设置为RSP寄存器指向的内存.我不能只将一个观察点设置到某个地址,因为可以从不同的地方调用该函数.所以我想在函数的开始和结束时设置断点,并强制它们启用/禁用观察点.
但是设置观察点的方式都不适合我.例如,wa $rsp观看登记册; 该
set $myvar = $rsp
wa $myvar
Run Code Online (Sandbox Code Playgroud)
使观察点跟踪... $ myvar的变化!不是它存储的价值!
很奇怪,我敢肯定,这应该是一种方式,但我不知道一个......
UPD:看起来我在gdb中发现了一个bug.二:
(gdb) wa *$rsp
Attempt to dereference a generic pointer.
(gdb) set $myvar = $rsp
(gdb) wa *$myvar
Attempt to dereference a generic pointer.
Run Code Online (Sandbox Code Playgroud)
UPD:不知道为什么,但wa &*$myvar设置了$ myvar的断点,但不应该.错误?
为了通过Emacs和gdb调试应用程序,调试输出的行数有时可能会快速克服9xxxx.有没有办法迫使Emacs在数量超过例如1000之后删除旧线?
我的意思是:我有一堆不同的结构/类,所有这些都应该用已知的预先值初始化.除了预初始化之外,这些结构/类永远不会以其他方式使用,因此不需要构造函数 - 它只是浪费额外的内存,程序中的额外CPU周期以及源代码中的额外空间.
我做了一个简单的函数,它需要一个 gzipped 文件,并在某处提取。出于测试目的,我使用了一个通过通用实用程序gzip压缩的文本文件。但出于某种原因,Uncompress ()返回错误Z_DATA_ERROR。
我走进调试器直到函数,它肯定会得到正确的数据(整个文件内容,它只有 37 个字节),所以它似乎是两个之一:可怕的 zlib-bug 现在正在窃取你的时间,或者我错过了一些重要的东西,然后我真的很抱歉。
#include <zlib.h>
#include <cstdio>
int UngzipFile(FILE* Dest, FILE* Source){
#define IN_SIZE 256
#define OUT_SIZE 2048
bool EOFReached=false;
Bytef in[IN_SIZE];
Bytef out[OUT_SIZE];
while(!EOFReached){//for no eof
uLong In_ReadCnt = fread(in,1,IN_SIZE,Source);//read a bytes from a file to input buffer
if(In_ReadCnt!=IN_SIZE){
if(!feof(Source) ){
perror("ERR");
return 0;
}
else EOFReached=true;
}
uLong OutReadCnt = OUT_SIZE;//upon exit 'uncompress' this will have actual uncompressed size
int err = uncompress(out, &OutReadCnt, in, In_ReadCnt);//uncompress …Run Code Online (Sandbox Code Playgroud) 我有一个简单的代码; 这里我有两个按钮,我按下第一个按钮,它显示一个MsgBox.然后我按下"Okay",它应该调用用第二个按钮写的连接动作,但事实并非如此.相反,我得到一个错误:
Object::connect: No such signal QMessageBox::buttonClicked(QMessageBox::Ok)
Object::connect: (receiver name: 'OpenFile_Bttn')
Run Code Online (Sandbox Code Playgroud)
代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_OpenFile_Bttn_clicked(){
QFileDialog::getOpenFileName(this,tr("Open file"), "", tr(""));//Open a dialog "OpenFile"
}
void MainWindow::on_pushButton_clicked(){
QMessageBox msgBox;
msgBox.setText("Push button to choose a file");
//Connect clicking button in MsgBox to an action in OpenFile_Bttn button
QWidget::connect(&msgBox,SIGNAL(buttonClicked(QMessageBox::Ok)),
ui->OpenFile_Bttn, SLOT(on_OpenFile_Bttn_clicked()));
msgBox.exec();//Show MsgBox
}
Run Code Online (Sandbox Code Playgroud)
另外我发现了一个有趣的事情,当MsgBox弹出时会出现错误消息,但是当我单击MsgBox中的"Ok"按钮时则不会出现.
#include "stdafx.h"
#include <Windows.h>
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
DWORD d = GetFileAttributes(argv[0]);
_TCHAR* temp;
printf("%d\n", d);
switch(d)
{
case 2048: temp = L"Compressed"; break;
case 32: temp = L"Archive"; break;
case 16: temp = L"Directory"; break;
case 16384: temp = L"Encrypted"; break;
case 2: temp = L"Hidden"; break;
case 128: temp = L"Normal"; break;
case 1: temp = L"Readonly"; break;
case 4: temp = L"System"; break;
case 256: temp = L"Temporary"; break;
default: temp = L"Error …Run Code Online (Sandbox Code Playgroud) 有时我需要知道不在范围内的结构的大小(甚至不在堆栈中,即frame相关的命令也无济于事).例如,它发生在调试客户端+服务器通信时,重新启动应用程序只是在结构的上下文中断,目的是找到大小是不舒服和耗时的.
如何struct在忽略当前上下文的情况下找到标题中定义的大小?
这里有一个我试图运行的基本代码但是我遇到stoi问题(这是c ++)我一直收到错误:
‘stoi’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
我试过atoi和strtol这个错误
.cpp:23: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int atoi(const char*)’
Run Code Online (Sandbox Code Playgroud)
代码:
using namespace std;
int main(){
string numberGuessed;
int intNumberGuessed = 0;
do {
cout << "Guess a numeber btw 1 - 10: " << endl;
getline(cin, numberGuessed);
intNumberGuessed = atoi(numberGuessed);
cout << intNumberGuessed << endl;
} while(intNumberGuessed != 4);
cout<< "you win" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)