小编Ste*_*erg的帖子

如何使一个错误(和其他问题)后,AddressSanitizer不会停止

我正在运行OS X,10.8.5; 我已经通过自制软件安装llvm 3.4(clang版本3.4(标签/ RELEASE_34/final)),我正在使用-fsanitize = address构建.我可以使用简单的演示程序,但是在构建我们的代码库时,我遇到了一些问题(虽然我真的只想回答#1):

  1. 第三方库正在生成asan错误,并且asan在第一次出现时终止了我的应用程序.我认为会有某种(运行时/编译时)选项告诉asan在找到错误后继续前进.具体来说,我看到了这个:

    bash-3.2$ ASAN_SYMBOLIZER_PATH=/usr/local/Cellar/llvm34/3.4/lib/llvm-3.4/bin/llvm-symbolizer ./unit_test
    Start testing of PathTrieTest
    Config: Using QTest library 4.8.2, Qt 4.8.2
    PASS   : PathTrieTest::initTestCase()
    PASS   : PathTrieTest::pathTrieNodeTest()
    =================================================================
    ==76647==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x61600019e588 at pc 0x10891ddd3 bp 0x11312ba90 sp 0x11312ba58
    WRITE of size 48830 at 0x61600019e588 thread T3
        #0 0x10891ddd2 in wrap_readdir_r (/usr/local/lib/llvm-3.4/lib/clang/3.4/lib/darwin/libclang_rt.asan_osx_dynamic.dylib+0x11dd2)
        #1 0x10ac23571 in QFileSystemIterator::advance(QFileSystemEntry&, QFileSystemMetaData&) (/Volumes/ToolChain/qt-4.8/lib/QtCore.framework/Versions/4/QtCore+0xef571)
        #2 0x10abd86d3 in QDirIteratorPrivate::advance() (/Volumes/ToolChain/qt-4.8/lib/QtCore.framework/Versions/4/QtCore+0xa46d3)
        #3 0x10abd7a7f in QDirIteratorPrivate::QDirIteratorPrivate(QFileSystemEntry const&, QStringList const&, QFlags<QDir::Filter>, QFlags<QDirIterator::IteratorFlag>, bool) (/Volumes/ToolChain/qt-4.8/lib/QtCore.framework/Versions/4/QtCore+0xa3a7f)
        #4 0x10abd8b68 in …
    Run Code Online (Sandbox Code Playgroud)

macos llvm clang address-sanitizer

16
推荐指数
2
解决办法
6962
查看次数

如何使Finder Sync Extension更改徽章以响应外部事件

我有一个Finder Sync Extension,它将根据本地数据库的状态在文件上显示徽章.在requestBadgeIdentifierForURL函数中查询此数据库非常简单,但是如果我希望徽章更改为已经可见的Finder项,如果该数据库的状态已更改(可以通过任何各种机制通知).文档(https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Finder.html)似乎暗示这可以通过以下声明:

您可能还希望跟踪这些URL,以便在状态发生变化时更新其徽章.

我能想象的唯一方法是可能的(而且大多数似乎是错误的)将是:

  • 从另一个知道更改的应用程序调用setBadgeIdentifier:forURL

  • 在我的扩展的init函数中启动一个线程,该线程侦听通知并在收到它们时调用setBadgeIdentifier:forURL

  • 调用一些OS API,提示Finder应该通过requestBadgeIdentifierForURL触发扩展.

只有最后一个看起来可行,并且可以通过扩展来管理,通过beginObservingDirectoryAtURL/endObservingDirectoryAtURL回调通知外部资源需要刷新的内容,但我不知道哪种机制可以做到这一点.

macos synchronization finder

7
推荐指数
0
解决办法
109
查看次数

删除Oracle数据库上的旧数据的技术

我们有一个成熟的Oracle数据库应用程序(已经生产了10多年),在此期间,我们一直在使用我们自己设计的脚本来删除不再需要的旧数据.它们通过在频繁提交的循环中针对适当的表发出delete语句来工作,以避免使用i/o或使用过多的撤消空间来使系统过载.

在大多数情况下,它们工作正常.它们每天运行,从系统中删除最早的数据需要大约一个小时.我所关注的主要问题是对所有这些删除可能具有的表和索引的影响,以及尽管它们不会过度加载系统,但在短时间内删除一天的数据确实会产生影响out实例缓冲区缓存,导致后续查询在接下来的几个小时内运行稍慢,因为缓存逐渐恢复.

多年来我们一直在考虑更好的方法.在过去,我听说人们使用分区表来管理旧数据收获 - 例如,每个分区一个月,并且每月删除最旧的分区.这种方法的主要缺点是我们的收获规则超出了"删除月X".用户可以根据键值指定数据在系统中必须保留多长时间(例如,在发票表中,帐户foo可以在3个月后删除,但帐户栏可能需要保留2年).

还存在参照完整性问题; Oracle文档讨论了使用分区来主要在数据仓库的上下文中清除数据,其中表往往是超立方体.我们更接近OLTP的结尾,并且月X中的数据与月Y中的数据有关系是很常见的.为这些表创建正确的分区键最多也是痒痒的.

至于缓存井喷,我已经阅读了一些关于设置专用缓冲区缓存的内容,但它看起来更像是基于每个表,而不是基于每个用户或每个事务.为了保留缓存,我真的希望收获工作随时只在缓存中保留一个事务的数据,因为删除后不需要保留数据.

我们是否在可预见的未来坚持使用删除,还是有其他更聪明的方法来处理收割?

oracle partitioning purge

6
推荐指数
1
解决办法
5019
查看次数

尝试使用OSX使用schemacrawler连接到sqlite db - 为什么要求用户?

见底部得出结论:

我正在尝试使用schemacrawler来绘制sqlite数据库.我的设置:

  • OSX 10.8
  • SchemaCrawler 10.5从Here下载
  • 从Oracle下载的Java版本1.7.0_45
  • sqlite版本:3.7.12 2012-04-03 19:43:07 86b8481be7e76cccc92d14ce762d21bfb69504af

我在安装schemacrawler的目录中,并使用以下命令行:

stebro$ java -classpath lib/*:. schemacrawler.tools.sqlite.Main /Library/Application\ Support/MyApp/Data/MyApp.db -command="select count(*) from myTable" -infolevel=maximum
SchemaCrawler 10.5
Copyright (c) 2000-2013, Sualeh Fatehi.

SchemaCrawler is a database schema discovery and comprehension tool. 
You can search for database schema objects using regular expressions, 
and output the schema and data in a readable text format. You can find 
potential schema design issues with lint. The output serves for 
database documentation is designed …
Run Code Online (Sandbox Code Playgroud)

sqlite macos jdbc schemacrawler

5
推荐指数
1
解决办法
2715
查看次数

如何在高容量模型更新方案中处理无响应的UI

我们使用的是Qt 4.8.2,我们有一个模型/视图设计(具体是QAbstractItemModel和QTreeview的子类).模型/树视图遵循视图驱动模型的典型原理 - 在用户展开相应的树视图节点之前,我们不会填充模型.

一旦节点被扩展并且数据可见,它就会受到工作(非UI)线程中发生的显示更新的影响.现在,当工作线程产生可能影响树视图的更改时,它会发出"更改"信号,该信号将映射到模型中的插槽.

问题是这些变化信号可以以很高的频率发出(例如,一秒钟内发生1500次事件),但有时它们可​​能适用于树视图当前显示的内容(因此可以忽略).当发生这种情况时,UI线程变得没有响应,因为(我假设)信号都排队,UI线程必须先处理它们才能恢复用户交互.

响应变化信号所需的时间非常短,但似乎UI线程仅在一小段延迟后"吃掉"信号 - 可能是为了避免过度更新导致屏幕闪烁或其他烦恼.

结果是UI保持冻结5或6秒,在此期间CPU活动非常低(可能是因为信号进入速度足够快,处理程序仍在等待操作中断); 一旦所有信号排队,线程最终消耗队列中的工作并在几毫秒内解决它.

我对此有几点想法:

  1. 是否有一些设置可以增加UI线程处理输入信号的攻击性?

  2. 在单独的线程中管理模型的更新是否可行?我的直觉是拒绝 - 看起来Qt机器太依赖于模型的独占所有权,并且在其访问周围放置适当的锁定保护将是复杂的并且违反了槽/信号范例的整个点.

  3. 我可以想出更复杂的方案来处理辅助线程中的这些信号; 例如,UI可以维护单独的多线程可见(非模型)数据结构,可以查询该数据结构以确定是否需要发送变化信号.类似地,我可以维护一个工作线程使用的单独队列,在那里我可以将事件批量更改为单个信号(例如,我可以提供不超过两次的信号).但是这些方法让我觉得有点像拜占庭式的问题,我认为这个问题在Qt UI编程领域绝对不是很常见.

c++ model-view-controller qt

5
推荐指数
1
解决办法
222
查看次数

如何使用Qt Network类防止关闭竞争条件

我们有一个OS X C++应用程序,使用Qt 5.5提供简单的HTTP服务器接口.它基本上类似于Qt(http://doc.qt.io/qt-5/qtnetwork-fortuneserver-example.html)提供的Fortune Server示例,但我们看到的是偶尔会出现应用程序错误shutdown,具有以下堆栈跟踪(线程6崩溃):

Thread 0:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x00007fff8deb4fca __open + 10

Thread 1:: Dispatch queue: com.apple.libdispatch-manager
0   libsystem_kernel.dylib          0x00007fff8deb6232 kevent64 + 10
1   libdispatch.dylib               0x00007fff90f0426e _dispatch_mgr_thread + 52

Thread 2:
0   libsystem_kernel.dylib          0x00007fff8deb594a __workq_kernreturn + 10
1   libsystem_pthread.dylib         0x00007fff887833dd start_wqthread + 13

Thread 3:
0   libsystem_kernel.dylib          0x00007fff8deb594a __workq_kernreturn + 10
1   libsystem_pthread.dylib         0x00007fff887833dd start_wqthread + 13

Thread 4:
0   libsystem_kernel.dylib          0x00007fff8deb594a __workq_kernreturn + 10
1   libsystem_pthread.dylib         0x00007fff887833dd start_wqthread + 13

Thread 5:: Dispatch …
Run Code Online (Sandbox Code Playgroud)

c++ qt qnetworkaccessmanager

5
推荐指数
1
解决办法
362
查看次数

如何使cmake仅为automoc文件添加编译器定义

我们的项目使用了非常严格的警告集,但是Qt5生成的moc文件所生成的代码违反了这些警告。显然,我们可以全局关闭警告,但是我只想禁止对automoc文件的警告。

例如:

In file included from /Users/stebro/client/build/NotificationServer/Notification_automoc.cpp:2:
/Users/stebro/client/build/NotificationServer/moc_NotificationServer.cpp:100:18: error: dereference of type '_t *' (aka 'void (carbonite::NotificationServer::**)(const QByteArray &, const QString, const QVariant)') that was reinterpret_cast from type 'void **' has undefined behavior [-Werror,-Wundefined-reinterpret-cast]
            if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&NotificationServer::notificationQueued)) {
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

以下内容不起作用:

set_property(
  DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  PROPERTY COMPILE_DEFINITIONS -Wundefined-reinterpret-cast
  )
Run Code Online (Sandbox Code Playgroud)

cmake抱怨:

  set_property DIRECTORY scope provided but requested directory was not
  found.  This could be because the directory argument was invalid or, it is
  valid but has not been processed yet.
Run Code Online (Sandbox Code Playgroud)

我不能使用set_property(FILE …

qt cmake automoc

5
推荐指数
1
解决办法
973
查看次数

当 OSX Finder“连接到服务器...”成功时,什么会导致 pysmb 失败?

(最初是在 StackOverflow 上问的,但我认为这里有更合适的专家):

我正在尝试使用 python 脚本(在 OSX 10.10 上运行)从远程 samba 共享(在 Windows 服务器上)传输文件。我可以使用 Finder 的 Go->“连接到服务器...”对话框挂载共享,但是当我尝试在 python (v 2.7.6) 中使用与 pysmb 模块相同的凭据时,我收到“连接被拒绝。 ”:

>>> from smb.SMBConnection import SMBConnection
>>> conn =SMBConnection('myuser', 'mypassword','me','remote-server-netbios-name')
>>> assert conn.connect('remoteserver.mycompany.com')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/smb/SMBConnection.py", line 103, in connect
    self.sock.connect(( ip, port ))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 61] Connection refused
Run Code Online (Sandbox Code Playgroud)

同样,如果我尝试使用 NetBIOS 包来获取远程服务器的名称(以确认我得到的名称正确),它就会超时:

>>> from nmb.NetBIOS import NetBIOS
>>> 
>>> def …
Run Code Online (Sandbox Code Playgroud)

python samba firewall netbios

3
推荐指数
1
解决办法
2834
查看次数