在调试时,有时您需要附加已经运行的进程,而不是仅在调试器中启动应用程序.
我自己常常放入Sleep()或MessageBox调用,以便更容易连接调试器.我担心其中一些可能最终会被提交给源代码控制.
在延迟足够时间的同时避免这种情况的最佳方法是什么,以便可以将调试器连接到正在运行的进程?
用#ifdef _DEBUG一种方式保护睡眠或消息框,但我想知道是否有更好的方法.
睡眠时,您还有一个问题,即您可能无法及时附着.使用MessageBox,您可能遇到远程调试或调试没有可见GUI的进程的问题(示例在Vista上作为服务运行)
以下代码是否合法C++?
class Foo
{
class Bar;
void HaveADrink(Bar &bar);
void PayForDrinks(Bar &bar);
public:
void VisitABar(int drinks);
};
class Foo::Bar
{
public:
int countDrinks;
};
void Foo::HaveADrink(Bar &bar)
{
bar.countDrinks++;
}
void Foo::PayForDrinks(Bar &bar)
{
bar.countDrinks = 0;
}
void Foo::VisitABar(int drinks)
{
Bar bar;
for (int i=0; i<drinks; i++) HaveADrink(bar);
PayForDrinks(bar);
}
Run Code Online (Sandbox Code Playgroud)
Visual C++和GCC都接受它,但是代码对我来说似乎有些奇怪,我不愿意让它被未来的编译器拒绝.
尽管如此,这种模式似乎对减少编译时依赖性很有用 - 我经常使用它来声明用于传递一些"上下文"(一堆变量)的结构,这些结构在一些函数之间共享,这些函数都位于同一个cpp中文件,这样我就不必将"上下文"定义引入公共接口.
在我的Scala代码中,我有一些隐式转换,我有必要的导入存在:
import scala.language.implicitConversions
Run Code Online (Sandbox Code Playgroud)
但是,有时当在此之后再进行另一次导入时,我会收到警告,好像导入根本不存在:
警告:(112,18)隐式转换方法pair2Dimension应该通过使隐式值scala.language.implicitConversions可见来启用.
build.sbt:
name := "ImplicitSBT"
version := "1.0"
scalaVersion := "2.11.5"
scalacOptions ++= Seq("-deprecation","-feature")
libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "1.0.1"
Run Code Online (Sandbox Code Playgroud)
Main.scala:
import scala.language.implicitConversions
import scala.swing.{Action, _}
object Main extends App {
implicit def pair2Dimension(pair: (Int, Int)): Dimension = new Dimension(pair._1, pair._2)
val dim : Dimension = (0,0)
println(dim)
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?如何import scala.swing.{Action, _}隐藏implicitConversions导入?
我想在时间关键函数中复制相对较短的内存序列(小于1 KB,通常为2-200字节).CPU端的最佳代码似乎是rep movsd.但是我不知道怎么能让我的编译器生成这段代码.我希望(我依旧记得这么看)使用memcpy会使用编译器内置的内在函数来做到这一点,但基于反汇编和调试,似乎编译器正在使用调用memcpy/memmove库实现.我也希望编译器可能足够聪明,可以识别以下循环并单独使用rep movsd,但似乎没有.
char *dst;
const char *src;
// ...
for (int r=size; --r>=0; ) *dst++ = *src++;
Run Code Online (Sandbox Code Playgroud)
有没有办法让Visual Studio编译器生成rep movsd序列而不是使用内联汇编?
我的问题类似于将图像添加到源代码中,但我的环境是Visual C++.有没有办法如何添加图像作为注释的一部分,并让IDE显示它们(内联,或通过点击它们或对它们执行某些操作)?
我到目前为止所要做的是要么使用其URL提供放置在SVN中的外部.PNG或.SVG文件的URL,要么创建一个ASCII艺术,但在GUI和富有的时代我感到很奇怪各地的文件仍然限于此.如果没有更好的解决方案,是否至少有一些插件可以使这更加简化(例如,通过为我创建SVN文档并在评论中放置链接,或者通过帮助我在ASCII艺术绘图中)?
c++ documentation visual-studio-2010 visual-studio visual-c++
我有两个清单: List(1,1,1) , List(1,0,1)
我想得到以下内容:
每个元素的计数,包含第一个列表中的1和相应列表中相同位置的0,反之亦然.在上面的例子中,这将是1,0,因为第一个列表在中间位置包含1,而第二个列表在相同位置(中间)包含0.
每个元素的计数,其中1在第一个列表中,1也在第二个列表中.在上面的例子中,这是两个,因为每个相应的列表中有两个1.我可以使用类List的intersect方法得到它.
我只是在寻找上述第1点的答案.我可以使用迭代方法来计算项目,但是有更实用的方法吗?这是整个代码:
class Similarity {
def getSimilarity(number1: List[Int], number2: List[Int]) = {
val num: List[Int] = number1.intersect(number2)
println("P is " + num.length)
}
}
object HelloWorld {
def main(args: Array[String]) {
val s = new Similarity
s.getSimilarity(List(1, 1, 1), List(1, 0, 1))
}
}
Run Code Online (Sandbox Code Playgroud) 我在Scala中找不到这样的东西,并且调用Java函数似乎我需要设置值或调用java.lang.Double静态方法:
Double.box(x).isNaN
java.lang.Double.isNaN(x)
Run Code Online (Sandbox Code Playgroud)
难道没有什么比Scala更"原生"来测试无限/ NaN-ness了吗?
当无法找到源时,IntelliJ可以显示和调试反编译的类.有没有办法强制调试器使用反汇编代替源代码,即使找到源代码,除了删除源代码?
这在源错误(与类不匹配)的情况下非常有用.
在阅读build.sbt许多 Web 应用程序时,经常可以看到标记为 的依赖项"provided",例如参见sbt-assembly 文档:
“org.apache.spark”%%“spark-core”%“0.8.0-incubating”%“提供”
我在 SBT 文档中找不到任何提及,但是Maven 文档说明了以下内容:
- 假如
这很像编译,但表明您希望 JDK 或容器在运行时提供依赖项
然而,有时我也看到"container"了同样的位置,比如在这个 build.sbt 中。这是同一件事吗?
val tomcatVersion = "7.0.53"
libraryDependencies ++= Seq(
"org.apache.tomcat.embed" % "tomcat-embed-core" % tomcatVersion % "container",
"org.apache.tomcat.embed" % "tomcat-embed-logging-juli" % tomcatVersion % "container",
"org.apache.tomcat.embed" % "tomcat-embed-jasper" % tomcatVersion % "container",
"org.apache.tomcat" % "tomcat-catalina" % tomcatVersion % "provided",
"org.apache.tomcat" % "tomcat-coyote" % tomcatVersion % "provided"
)
Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
object Main extends App {
object Project {
case class Config(rules: Seq[String] = Seq.empty)
}
import Project._
//case class Project(root: String, config: Config) // compiles fine
//case class Project(root: String, config: Project.Config = Project.Config()) // compiles fine
case class Project(root: String, config: Config = Config()) // error: not found: type Config
}
Run Code Online (Sandbox Code Playgroud)
为什么最后一个版本没有编译(与之相同Config = Config.apply())?
scala ×5
c++ ×4
debugging ×2
visual-c++ ×2
debugbreak ×1
definition ×1
disassembly ×1
double ×1
import ×1
intrinsics ×1
java ×1
jvm ×1
memcpy ×1
performance ×1
sbt ×1
warnings ×1