我一直在互联网上寻找这个问题的答案(见帖子主题).我被问过两次这个确切的问题.一旦接受公司的采访,一次接受朋友的采访,我找不到生活中的答案.
在没有调试器的情况下调试时,我实际上经历过多次错误,并且只使用print语句来隔离错误.我不记得任何确切的情况,虽然我很肯定我经历过它.如果任何人都可以提供链接或引用或指向printf()源中的某些内容,这可能会导致在使用print语句调试代码时停止发生错误,我将非常感谢良好的阅读.
谢谢Matthew Hoggan
我目前正在阅读所提供的链接,但为了进一步对话,我发布了一些我调查的弱尝试:
好吧,所以我已经开始玩自己尝试回答我自己的问题,但事情仍然不是100%清楚.下面是g ++编译器的输出,使用-S选项输出程序集而不是可执行文件.等效的C++代码也发布在下面.我的目标是尝试重新创建一个简单的场景,然后根据指令尝试检测处理器级别可能发生的情况.所以,让我们说"调用printf"汇编代码,我假设是从存储在/ usr/lib或其他lib目录中的库文件链接,我试图访问NULL指针(不在代码中),或其他一些传统上会使程序崩溃的操作形式.我假设我必须找出printf正在做什么教学才能深入了解这个?
.file "assembly_test_printf.cpp"
.section .rodata
.LC0:
.string "Hello World"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
.cfi_personality 0x0,__gxx_personality_v0
pushl %ebp
.cfi_def_cfa_offset 8
movl %esp, %ebp
.cfi_offset 5, -8
.cfi_def_cfa_register 5
andl $-16, %esp
subl $32, %esp
movl $0, 28(%esp)
movl $.LC0, (%esp)
call printf
movl 28(%esp), %eax
leave
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"
.section .note.GNU-stack,"",@progbits
Run Code Online (Sandbox Code Playgroud)
等价的C++代码:
#include <stdio.h>
int main ( int argc, char** argv …Run Code Online (Sandbox Code Playgroud) 为什么这个循环不会终止?程序打印出istream_iterator中的所有元素后冻结.
/*30*/ int main( int arc, char **arv ) {
/*31*/ vector<float> numbers( 0 );
/*32*/ cout << "Please, input even number of floats: ";
/*33*/ istream_iterator<float> iit (cin);
/*34*/ istream_iterator<float> eos;
/*35*/ while( iit != eos ) {
/*36*/ cout << (*iit) << endl;
/*37*/ iit++;
/*38*/ }
/*39*/ if( numbers.size( ) & 1 == 1 ) {
/*40*/ cerr << "Sorry: you must input"
/*41*/ << " an even number of inputs" << endl;
/*42*/ }
/*43*/ return …Run Code Online (Sandbox Code Playgroud) 为什么这个程序没有打印到屏幕上,我在INT 80命令上遗漏了什么?
section .bss
section .data
hello: db "Hello World",0xa ;10 is EOL
section .text
global _start
_start:
mov ecx, 0; ; int i = 0;
loop:
mov dl, byte [hello + ecx] ; while(data[i] != EOF) {
cmp dl, 0xa ;
je exit ;
mov ebx, ecx ; store conetents of i (ecx)
; Print single character
mov eax, 4 ; set sys_write syscall
mov ecx, byte [hello + ebx] ; ...
mov edx, 1 ; move one byte …Run Code Online (Sandbox Code Playgroud) 从目前尚未删除的图片来看,有人可以更详细地阐述Linux的系统调用(例如read()和write()等之间的区别,并使用x86 INT操作码和汇编在汇编中编写它们指定的寄存器?
这是代码,我知道它不是完美的perl.如果您对我如何更好地了解我有所了解.我的主要问题是如何在不使用Data :: Dumper的情况下打印出数组?
#!/usr/bin/perl
use Data::Dumper qw(Dumper);
use strict;
use warnings;
open(MYFILE, "<", "move_headers.txt") or die "ERROR: $!";
#First split the list of files and the headers apart
my @files;
my @headers;
my @file_list = <MYFILE>;
foreach my $source_parts (@file_list) {
chomp($source_parts);
my @parts = split(/:/, $source_parts);
unshift(@files, $parts[0]);
unshift(@headers, $parts[1]);
}
# Next get a list of unique headers
my @unique_files;
foreach my $item (@files) {
my $found = 0;
foreach my $i (@unique_files) {
if ($i eq $item) …Run Code Online (Sandbox Code Playgroud) 是否有任何关于线程和并发编程的书籍的建议不是特定于语言的?涵盖不同类型的互斥锁,等待条件,信号量及其与线程应用程序的连接概念的书籍.
如果您有一本特定于语言的书,我宁愿它不涉及托管或脚本语言,例如Java,C#,Python等.
鉴于我的想法,我咆哮着错误的树?或者提供以下信息我是否滥用Qt API来获取标题中的错误?
我正在尝试修改http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html上的示例,以使用Qt Creator 3.3.0(opensource)生成的默认QtQuick项目. Qt 5.4.0(GCC 4.6.1,64位).
仔细查看代码后,第一件事就是:
样本main.cpp使用:
qmlRegisterType<Squircle>("OpenGLUnderQML", 1, 0, "Squircle");
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:///scenegraph/openglunderqml/main.qml"));
view.show();
Run Code Online (Sandbox Code Playgroud)
有些重命名我的main.cpp使用
qmlRegisterType<MainScreen>("OpenGLUnderQML", 1, 0, "MainScreen");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
Run Code Online (Sandbox Code Playgroud)
我不确定使用QQmlApplicationEngine而不是QuickView的差异是否会导致我的错误:
QQmlApplicationEngine无法加载组件qrc:/main.qml:23
无效的附加对象分配
我的main.qml看起来像:
import QtQuick 2.4
import QtQuick.Window 2.2
import OpenGLUnderQML 1.0
import "qmlmodel"
Window {
id: mainWindow
width: 800
height: 600
visible: true
color: "black"
title: "Army Calculator"
objectName: "mainWindow"
ListView {
id: mainListView
anchors.fill: parent
objectName: "mainListView"
}
MainScreen {
SequentialAnimation on DeltaT {
NumberAnimation { to: 1; …Run Code Online (Sandbox Code Playgroud) 我有一个由CMake自动生成的vcxproj文件构建的64位本机库。CMake构建脚本的一部分会在csharp中自动生成Swig文件。我使用下面标记为Articaft 1的.csproj 构建Swig生成的.cs文件。然后,我有一个C#单元测试项目Artifact 2,下面引用了从Articaft 1生成的.dll 。Articafct 2还会复制由64位本机库生成的dll。
如果我将本机库编译为32位库,那么一切正常,但是如果我在C#单元测试项目中使用64位本机库,则测试将失败并显示以下内容:
C:\Users\mehoggan\Devel\QuadKeys\UnitTestCSharp\TestBingSystem.cs:line 13
Result Message:
Test method QuadKeyTests.TestBingSystem.TestCtor threw exception:
System.TypeInitializationException: The type initializer for 'QuadKeyNS.SwigQuadKeyPINVOKE' threw an exception. ---> System.TypeInitializationException: The type initializer for 'SWIGExceptionHelper' threw an exception. ---> System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
Run Code Online (Sandbox Code Playgroud)
如何获得C#单元测试以使用库的64位版本?
神器1
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' …Run Code Online (Sandbox Code Playgroud) 我git submodule update --remote在我的存储库上运行,然后在检查回归测试后推送到 master。然而,我的测试没有 100% 的覆盖率,有些东西漏掉了。我想在远程更新之前恢复到我的一个子模块中的先前散列。
两个问题:
我有:
val sparkBuilder: SparkSession.Builder = SparkSession
.builder
.appName("CreateModelDataPreparation")
.config("spark.master", "local")
implicit val spark: SparkSession = sparkBuilder.getOrCreate()
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的程序时,我仍然得到:
org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.<init>(SparkContext.scala:379)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2313)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:868)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:860)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:860)
Run Code Online (Sandbox Code Playgroud)
SparkSession 按照其他帖子中的建议在 Main 方法中设置。这些似乎并没有解决问题。
这与建议的重复不同,因为我已经尝试过两者:
def main(argv: Array[String]): Unit = {
import DeweyConfigs.implicits.da3wConfig
val commandlineArgs: DeweyReaderArgs = processCommandLineArgs(argv)
val sparkBuilder: SparkSession.Builder = SparkSession
.builder
.appName("CreateModelDataPreparation")
.master("local")
implicit val spark: SparkSession = sparkBuilder.config("spark.master", "local").getOrCreate()
import spark.implicits._
...
Run Code Online (Sandbox Code Playgroud)
和
def main(argv: …Run Code Online (Sandbox Code Playgroud) c++ ×3
linux ×2
64-bit ×1
apache-spark ×1
assembly ×1
c# ×1
concurrency ×1
data-dumper ×1
debugging ×1
git ×1
kernel ×1
nasm ×1
perl ×1
qml ×1
qt ×1
qt-quick ×1
qt5.4 ×1
scala ×1
stl ×1
system-calls ×1
visual-c++ ×1